25.02.2020

Установка Apache Kafka на Ubuntu 18.04

Публикация расскажет, как установить брокер сообщений Apache Kafka на серверную платформу. В качестве серверной ОС используется Ubuntu Server 18.04.

Немного теории

Apache Kafka не просто менеджер сообщений: он работает с большими объемами данных, оповещая каждого пользователя в зависимости от его подписок. Принцип работы сервиса следующий.

В любой организации существует множество приложений и программ, которые генерирует различные сообщения и оповещения. С другой стороны находятся системы мониторинга, которым необходима информация, например, об авторизации пользователей в базе данных 1С. Apache Kafka обеспечивает стабильную связь между двумя точками, гарантируя доставку пакетов. Несомненным преимуществом является то, что обновление перечня сообщений происходит в автоматическом режиме.

Система является масштабируемой по горизонтали, а также обладает высоким уровнем отказоустойчивости по сравнению с другими аналогичными продуктами. Ее используют такие крупные компании как Netflix, Twitter и др.

Предварительная подготовка

Apache Kafka создан на Java, т.е. для работы ему необходимы соответствующие компоненты на сервере. Для начала установим default-jre. Заведем пользователя с одноименным именем и паролем, который будет обрабатывать запросы брокера:

sudo useradd kafka –m

sudo passwd kafka


Теперь добавим учетное имя к группе sudo для получения привилегированных прав доступа:

sudo adduser kafka sudo


Перелогинимся и перейдем к инсталляции продукта:

su -l kafka


Скачивание дистрибутива

Сначала создаем директорию в домашнем разделе для сохранения загруженных файлов:

mkdir ~/Downloads


Загрузим дистрибутив с официального сайта продукта:

curl "http://www-eu.apache.org/dist/kafka/2.3.0/kafka-2.3.0-src.tgz" -o ~/Downloads/kafka.tgz


Важно! На дату 22 августа 2019 года актуальный релиз — 2.3.0.

Далее создаем каталог для распаковки архива, перейдем в него и извлечем информацию:

mkdir ~/kafka

cd ~/kafka

tar -xvzf ~/Downloads/kafka.tgz --strip 1


Теперь перейдем к конфигурированию решения.

Настройка Apache Kafka

Шаблон конфигурации, который поставляется вместе с брокером, расположен в kafka/config/server.properties. Чтобы сконфигурировать параметры Kafka под требуемые задачи, открываем его текстовым редактором и вносим соответствующие правки.


К примеру, добавим опцию удаления тем брокера. Для этого откроем файл через редактор vi и внесем следующую строку.

delete.topic.enable = true


Первичный старт Kafka на сервере

Настроим параметры запуска «брокера» сообщений под требуемые задачи. Для этого воспользуемся сервисом ZooKeeper. Он отслеживает состояние и конфигурацию Kafka.


Создадим файл конфигурации для ZooKeeper:

sudo vi /etc/systemd/system/zookeeper.service


Припишем в него следующую информацию:

[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
User=kafka
ExecStart=/home/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multy-user.target


Файл содержит разные блоки. К примеру, Unit отвечает за работоспособность сети и файловой системы, а Install говорит о том, чтобы служба ZooKeeper перезапускалась в автоматическом режиме, если произошел сбой.


Теперь создадим шаблон systemd для Apache Kafka.

sudo nano /etc/systemd/system/kafka.service


Также добавим в него строки:

[Unit]
Requires=zookeeper.service
After=zookeeper.service

[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1'
ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multy-user.target


В данном файле каждая секция также отвечает за разные условия.

После создания шаблонов, запустим службу kafka. Если необходимо, чтобы сервис запускался совместно с серверной частью, то прописываем:

sudo systemctl enable kafka


Протестируем работоспособность брокера сообщений.

Тестирование

Для проверки создадим фразу «Good morning», а потом ликвидируем ее. Чтобы сообщение опубликовалось, необходимы producer (тот, кто публикует) и consumer (тот, кто читает).


1. Придумываем тему, в который будет публикация. Дадим ей имя Demo:

~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic Demo

2. Используя внутреннюю команду kafka-console-producer.sh брокера, создаем producer. От его имени оформляем публикацию в теме Demo:

echo "Good Morning" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic Demo > /dev/null

3. Теперь создадим consumer, который прочитает публикацию в топике. Для этого также используем внутренний скрипт kafka-console-consumer.sh:

~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic Demo --from-beginning

4. В результате на мониторе появится «Good Morning». Чтобы остановить тестирование, нажимаем сочетание клавиш Ctrl+C.