В инструкции описан процесс установки Apache Kafka на виртуальный сервер под управлением операционной системы Ubuntu 18.04.
Что это такое?
Apache Kafka - популярный распределенный брокер сообщений, предназначенный для эффективного управления большими объемами данных в реальном времени. Кластер Kafka не только обладает высокой масштабируемостью и отказоустойчивостью, но также имеет гораздо более высокую пропускную способность по сравнению с аналогичными системами, например ActiveMQ и RabbitMQ.
Kafka обычно используется в качестве системы обмена сообщениями (публикации/подписки), многие организации также используют его для агрегации журналов, поскольку он предлагает постоянное хранилище для опубликованных сообщений.
Kafka имеет возможность обрабатывать сотни мегабайт данных чтения и записи в секунду от большого числа разных клиентов, что позволяет делать публикации сообщений в режиме реального времени без учета количества консьюмеров или способов их обработки.
Подписанным клиентам автоматически приходят уведомления об обновлениях и создании новых сообщений. Эта система более эффективна и масштабируема, чем системы, в которых пользователь должны самостоятельно и периодически проводить проверку наличия новых сообщений.
В целом, идея сервиса Apache Kafka незамысловатая. В огромной распределенной среде как правило очень много сервисов и приложений, которые генерируют разные события: логи, данные мониторинга, попытки доступа к файлам и приложениям, и прочее. С другой стороны, есть сервисы, которым эти данные очень нужны. И тут появляется Kafka: он находится между продюсерами и консьюмерами данных: собирает данные у первых, хранит у себя в распределенном хранилище по темам и раздаёт вторым по подписке. Другими словами, Kafka — это гибрид распределенной базы данных и очереди сообщений.
Kafka поддерживает работу многих популярных сервисов:
- Twitter - социальная сеть и платформа использует Kafka.Она обеспечивает отправку и получение всех пользовательских твитов, здесь пользователи читают и отправляют твиты, но незарегистрированные пользователи могут читать только твиты;
- LinkedIn использует Kafka для потока данных об активности и рабочих показателей сервиса, а также в дополнение к автономной сисеме аналитики Hadoop;
- Netflix также использует Kafka, в о сновном, для мониторинга и обработки событий в реальном времени.
В данной инструкции показан принцип работы сервиса, производится базовая установка и запуск сервера Kafka, а также проверка его работоспособности. Для внедрения продукта в бизнес используйте документацию разработчиков.
Первоначальные требования
Для настройки Apache Kafka требуется не менее 4 ГБ RAM на сервере во избежание сбоя службы Kafka и ошибки виртуальной машины Java (JVM).
Установка OpenJDK 8
Apache Kafka написана на Java, поэтому для ее работы требуется JVM, однако сценарий запуска имеет ошибку обнаружения версии, которая не позволяет запускаться системе с версиями JVM выше 8. Для установки виртуальной машины Java используйте следующую команду:
sudo apt install default-jre
Проверить установку и версию можно с помощью следующей команды:
java -version
Создание пользователя
Kafka обрабатывает запросы по сети, поэтому необходимо создать отдельного пользователя - это минимизирует ущерб вашей машине Ubuntu, если сервер Kafka будет скомпрометирован.
Создайте пользователя:
sudo useradd kafka -m
Примечание: ключ -m означает создать домашнюю директорию для пользователя.
Установите и подтвердите пароль:
sudo passwd kafka
Добавьте созданного пользователя к группе sudo:
sudo adduser kafka sudo
Для дальнейших настроек войдите под пользователем kafka:
su -l kafka
Загрузка файлов
В домашнем каталоге пользователя создайте каталог для загрузок:
mkdir ~/Downloads
Скачайте исходные файлы:
curl "http://www-eu.apache.org/dist/kafka/1.1.0/kafka_2.12-1.1.0.tgz" -o ~/Downloads/kafka.tgz
Создайте каталог для установки kafka и перейдите в него:
mkdir ~/kafka
cd ~/kafka
Извлеките архив, который вы загрузили с помощью команды tar:
tar -xvzf ~/Downloads/kafka.tgz --strip 1
Флаг --strip 1, гарантирует извлечение содержимого архива в ~/kafka/, а не в другой каталог (например, ~/kafka/kafka_2.12-1.1.0/) или внутри него.
Настройка сервера Kafka
Настройки по умолчанию не позволяют полноценно использовать все возможности Apache Kafka, например удалять тему, категорию, группу, на которые могут быть опубликованы сообщения. Чтобы изменить это, отредактируйте файл конфигурации:
nano ~/kafka/config/server.properties
Добавьте параметр, который позволяет удалять темы Kafka. Добавьте в конец файла следующее:
delete.topic.enable = true
Сохраните внесенные изменения.
Создание файлов Systemd Unit и запуск сервера Kafka
Файлы Systemd Unit помогут выполнять общие действия, такие как запуск, остановка и перезапуск Kafka в соответствии с другими службами Linux.
Zookeeper - это сервис, который Kafka использует для управления состоянием и конфигурацией. Он широко используется во многих распределенных системах как неотъемлемый компонент. Более подробную информацию можно найти на сайте Zookeeper.
Создайте файл для zookeeper:
sudo nano /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/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=multi-user.target
В секции [Unit] указано, что для работы Zookeeper требуется, чтобы сеть и файловая система были готовы. Секция [Service] указывает, что systemd должен использовать специальные файлы оболочки для запуска и остановки службы. Последняя строка секции означает, что Zookeeper следует перезапускать автоматически, если он выходит из строя ненормально.
Далее создайте файл службы systemd для 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=multi-user.target
Секция [Unit] обеспечивает автоматический запуск zookeeper при запуске службы kafka. Секция [Service] указывает, что systemd должен использовать специальные файлы оболочки для запуска и остановки службы. Последняя строка секции означает, что Kafka следует перезапускать автоматически, если он выходит из строя ненормально.
Теперь, когда секции определены, запустите Kafka:
sudo systemctl start kafka
Чтобы убедиться, что сервер успешно запущен, проверьте журналы для секции kafka:
sudo journalctl -u kafka
Вы должны увидеть результат, похожий на следующий:
Sept 7 17:21:05 kafka-ubuntu systemd[1]: Started kafka.service.
Теперь сервер Kafka запущен и прослушивает порт 9092.
Для того, чтобы kafka включался при загрузке сервера, выполните:
sudo systemctl enable kafka
Проверка установки
Давайте опубликуем и уничтожим сообщение «Hello World», чтобы убедиться, что сервер Kafka ведет себя корректно. Публикация сообщений в Кафке требует:
- producer - производитель, позволяет публиковать записи и данные по темам;
- consumer - слушатель, который читает сообщения и данные из тем.
Для начала, создайте тему под названием TutorialTopic:
~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic
Вы можете создать производителя (producer) из командной строки, используя скрипт kafka-console-producer.sh. В качестве аргументов скрипту передаются имя хоста сервера, порт и имя темы. Чтобы написать сообщение «Hello, World» в созданной теме TutorialTopic, введите:
echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null
Затем нужно создать слушателя (consumer), используя скрипт kafka-console-consumer.sh. В качестве аргументов скрипту передаются имя хоста и порт сервера ZooKeeper, а также название темы. Следующая команда принимает сообщения из темы TutorialTopic. Обратите внимание на использование флага --from-begin, который позволяет читать сообщения, которые были опубликованы до того, как был запущен слушатель:
~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning
В результате вы увидите сообщение в терминале:
Hello, World
Сценарий будет продолжать работать, ожидая большего количества сообщений в этой теме. Когда вы закончите тестирование, нажмите сочетание клавиш CTRL+C, чтобы остановить скрипт слушателя.