Как установить Apache Kafka на Ubuntu 20.04
Автор выбрал программу Write for DOnations.
Введение
КроликMQ. Хотя он обычно используется в качестве системы обмена сообщениями публикации/подписки, многие организации также используют его для агрегирования журналов, поскольку он предлагает постоянное хранилище для опубликованных сообщений.
Система обмена сообщениями публикации/подписки позволяет одному или нескольким производителям публиковать сообщения без учета количества потребителей или того, как они будут обрабатывать сообщения. Подписанные клиенты автоматически уведомляются об обновлениях и создании новых сообщений. Эта система более эффективна и масштабируема, чем системы, в которых клиенты периодически опрашивают, чтобы определить, доступны ли новые сообщения.
В этом руководстве вы установите и настроите Apache Kafka 2.8.2 в Ubuntu 20.04.
Предпосылки
Чтобы следовать дальше, вам понадобятся:
- Руководство по начальной настройке сервера, если у вас нет пользователя без полномочий root. Установка с объемом оперативной памяти менее 4 ГБ может привести к сбою службы Kafka.
- Как установить Java с помощью APT в Ubuntu 20.04. Kafka написана на Java, поэтому для нее требуется JVM.
Шаг 1 — Создание пользователя для Kafka
Поскольку Kafka может обрабатывать запросы по сети, ваш первый шаг — создать выделенного пользователя для службы. Это сводит к минимуму ущерб вашей машине с Ubuntu в случае, если кто-то скомпрометирует сервер Kafka. На этом шаге вы создадите выделенного пользователя kafka
.
Войдите на свой сервер как пользователь sudo
без полномочий root, затем создайте пользователя с именем kafka
:
- sudo adduser kafka
Следуйте инструкциям, чтобы установить пароль и создать пользователя kafka
.
Затем добавьте пользователя kafka
в группу sudo
с помощью команды adduser
. Вам нужны эти привилегии для установки зависимостей Kafka:
- sudo adduser kafka sudo
Теперь ваш пользователь kafka
готов. Войдите в учетную запись kafka
с помощью su
:
- su -l kafka
Теперь, когда вы создали пользователя для Kafka, вы готовы загрузить и извлечь двоичные файлы Kafka.
Шаг 2 — Загрузка и извлечение двоичных файлов Kafka
На этом шаге вы загрузите и извлечете двоичные файлы Kafka в специальные папки в домашнем каталоге пользователя kafka
.
Для начала создайте каталог /home/kafka
с именем Downloads
для хранения ваших загрузок:
- mkdir ~/Downloads
Используйте curl
для загрузки двоичных файлов Kafka:
- curl "https://downloads.apache.org/kafka/2.8.2/kafka_2.13-2.8.2.tgz" -o ~/Downloads/kafka.tgz
Создайте каталог с именем kafka
и перейдите в этот каталог. Вы будете использовать этот каталог в качестве базового каталога установки Kafka:
- mkdir ~/kafka && cd ~/kafka
Извлеките загруженный архив с помощью команды tar
:
- tar -xvzf ~/Downloads/kafka.tgz --strip 1
Вы указываете флаг --strip 1
, чтобы содержимое архива извлекалось в сам ~/kafka/
, а не в другой каталог (например, ~/kafka /kafka_2.13-2.8.2/
) внутри него.
Теперь, когда вы успешно загрузили и распаковали двоичные файлы, вы можете приступить к настройке сервера Kafka.
Шаг 3 — Настройка сервера Kafka
Тема Kafka — это категория, группа или имя канала, в котором можно публиковать сообщения. Однако поведение Kafka по умолчанию не позволит вам удалить тему. Чтобы изменить это, вы должны отредактировать файл конфигурации, что вы сделаете на этом шаге.
Параметры конфигурации Kafka указаны в server.properties
. Откройте этот файл с помощью nano
или вашего любимого редактора:
- nano ~/kafka/config/server.properties
Во-первых, добавьте параметр, который позволит вам удалять темы Kafka. Добавьте следующую строку в конец файла:
delete.topic.enable = true
Во-вторых, вы измените каталог, в котором хранятся журналы Kafka, изменив свойство log.dirs
. Найдите свойство log.dirs
и замените существующий маршрут выделенным маршрутом:
log.dirs=/home/kafka/logs
Сохраните и закройте файл.
Теперь, когда вы настроили Kafka, вы можете создать юнит-файлы systemd
для запуска и включения сервера Kafka при запуске.
Шаг 4 — Создание юнит-файлов systemd и запуск сервера Kafka
В этом разделе вы создадите юнит-файлы systemd
для службы Kafka. Эти файлы помогут вам выполнять стандартные действия службы, такие как запуск, остановка и перезапуск Kafka, в соответствии с другими службами Linux.
Kafka использует официальные документы Zookeeper. Вы будете использовать Zookeper как сервис с этими юнит-файлами.
Создайте файл модуля для 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-server-start.sh
и zookeeper-server-stop.sh.
файлы оболочки для запуска и остановки службы. Он также указывает, что 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.service
, что гарантирует автоматический запуск zookeeper
, когда запускается служба kafka
.
Раздел [Service]
указывает, что systemd
должен использовать kafka-server-start.sh
и kafka-server-stop.sh
файлы оболочки для запуска и остановки службы. В нем также указано, что Kafka следует перезапустить в случае аварийного завершения работы.
Сохраните и закройте файл.
Теперь, когда вы определили единицы измерения, запустите Kafka с помощью следующей команды:
- sudo systemctl start kafka
Чтобы убедиться, что сервер успешно запущен, проверьте журналы журнала для модуля kafka
:
- sudo systemctl status kafka
Вы получите такой вывод:
Output● kafka.service
Loaded: loaded (/etc/systemd/system/kafka.service; disabled; vendor preset>
Active: active (running) since Wed 2023-02-01 23:44:12 UTC; 4s ago
Main PID: 17770 (sh)
Tasks: 69 (limit: 4677)
Memory: 321.9M
CGroup: /system.slice/kafka.service
├─17770 /bin/sh -c /home/kafka/kafka/bin/kafka-server-start.sh /ho>
└─17793 java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMill>
Теперь у вас есть сервер Kafka, прослушивающий порт 9092
, который является портом по умолчанию, который использует сервер Kafka.
Вы запустили службу kafka
. Но если вы перезагрузите свой сервер, Kafka не перезапустится автоматически. Чтобы включить службу kafka
при загрузке сервера, выполните следующую команду:
- sudo systemctl enable zookeeper
Вы получите ответ о том, что символическая ссылка создана:
OutputCreated symlink /etc/systemd/system/multi-user.target.wants/zookeeper.service → /etc/systemd/system/zookeeper.service.
Затем запустите эту команду:
- sudo systemctl enable kafka
Вы получите ответ о том, что символическая ссылка создана:
OutputCreated symlink /etc/systemd/system/multi-user.target.wants/kafka.service → /etc/systemd/system/kafka.service.
На этом шаге вы запустили и включили службы kafka
и zookeeper
. На следующем шаге вы проверите установку Kafka.
Шаг 5 — Тестирование установки Kafka
На этом этапе вы проверите установку Kafka. Вы будете публиковать и использовать сообщение Hello World, чтобы убедиться, что сервер Kafka ведет себя должным образом.
Для публикации сообщений в Kafka требуется:
- Производитель, который позволяет публиковать записи и данные в темах.
- потребитель, который читает сообщения и данные из тем.
Для начала создайте тему с именем TutorialTopic
:
- ~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic
Вы можете создать производителя из командной строки, используя скрипт kafka-console-producer.sh
. В качестве аргументов он ожидает имя хоста сервера Kafka, порт и тему.
Вы получите ответ, что тема создана:
OutputCreated topic TutorialTopic.
Теперь опубликуйте строку Hello, World
в теме TutorialTopic
:
- echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null
Затем создайте потребителя Kafka с помощью скрипта kafka-console-consumer.sh
. В качестве аргументов он ожидает имя хоста и порт сервера ZooKeeper, а также имя темы. Следующая команда использует сообщения из TutorialTopic
. Обратите внимание на использование флага --from-beginning
, который разрешает использование сообщений, которые были опубликованы до запуска потребителя:
- ~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning
Если проблем с конфигурацией нет, вы получите ответ Hello, World
в своем терминале:
OutputHello, World
Сценарий продолжит работу, ожидая публикации новых сообщений. Чтобы проверить это, откройте новое окно терминала и войдите на свой сервер. Не забудьте войти в систему как пользователь kafka
:
- su -l kafka
В этом новом терминале запустите производителя для публикации второго сообщения:
- echo "Hello World from Sammy at DigitalOcean!" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null
Это сообщение будет загружено в выводе потребителя в исходном терминале:
OutputHello, World
Hello World from Sammy at DigitalOcean!
Когда вы закончите тестирование, нажмите CTRL+C
, чтобы остановить потребительский скрипт в исходном терминале.
Вы установили и настроили сервер Kafka в Ubuntu 20.04. На следующем шаге вы выполните несколько быстрых задач, чтобы усилить безопасность вашего сервера Kafka.
Шаг 6 — Укрепление сервера Kafka
После завершения установки вы можете удалить права администратора пользователя kafka
и усилить защиту сервера Kafka.
Прежде чем сделать это, выйдите из системы и снова войдите в нее как любой другой пользователь sudo
без полномочий root. Если вы все еще используете тот же сеанс оболочки, с которого вы начали это руководство, введите exit
.
Удалите пользователя kafka
из группы sudo:
- sudo deluser kafka sudo
Чтобы еще больше повысить безопасность вашего сервера Kafka, заблокируйте пароль пользователя kafka
с помощью команды passwd
. Это действие гарантирует, что никто не сможет напрямую войти на сервер, используя эту учетную запись:
- sudo passwd kafka -l
Флаг -l
блокирует команду смены пароля пользователя (passwd
).
На данный момент только пользователь root
или пользователь sudo
может войти в систему как kafka
с помощью следующей команды:
- sudo su - kafka
В будущем, если вы хотите разблокировать возможность смены пароля, используйте passwd
с опцией -u
:
- sudo passwd kafka -u
Теперь вы успешно ограничили права администратора пользователя kafka
. Вы готовы начать использовать Kafka. При желании вы можете выполнить следующий шаг, который добавит KafkaT в вашу систему.
Шаг 7 — Установка KafkaT (необязательно)
KafkaT был разработан, чтобы улучшить вашу способность просматривать сведения о вашем кластере Kafka и выполнять определенные административные задачи из командной строки. Поскольку это драгоценный камень Ruby, вам понадобится Ruby для его использования. Вам также понадобится пакет build-essential
для сборки других гемов, от которых зависит KafkaT
.
Установите Ruby и пакет build-essential
с помощью apt
:
- sudo apt install ruby ruby-dev build-essential
Теперь вы можете установить KafkaT с помощью команды gem
:
- sudo CFLAGS=-Wno-error=format-overflow gem install kafkat
Флаг компиляции Wno-error=format-overflow
необходим для подавления предупреждений и ошибок Zookeeper в процессе установки kafkat
.
Когда установка завершится, вы получите ответ, что она выполнена:
Output...
Done installing documentation for json, colored, retryable, highline, trollop, zookeeper, zk, kafkat after 3 seconds
8 gems installed
KafkaT использует .kafkatcfg
в качестве файла конфигурации для определения каталогов установки и журналов вашего сервера Kafka. Он также должен иметь запись, указывающую KafkaT на ваш экземпляр ZooKeeper.
Создайте новый файл с именем .kafkatcfg
:
- nano ~/.kafkatcfg
Добавьте следующие строки, чтобы указать необходимую информацию о вашем сервере Kafka и экземпляре Zookeeper:
{
"kafka_path": "~/kafka",
"log_path": "/home/kafka/logs",
"zk_path": "localhost:2181"
}
Сохраните и закройте файл. Теперь вы готовы использовать KafkaT.
Чтобы просмотреть сведения обо всех разделах Kafka, попробуйте выполнить эту команду:
- kafkat partitions
Вы получите следующий вывод:
Output[DEPRECATION] The trollop gem has been renamed to optimist and will no longer be supported. Please switch to optimist as soon as possible.
/var/lib/gems/2.7.0/gems/json-1.8.6/lib/json/common.rb:155: warning: Using the last argument as keyword parameters is deprecated
...
Topic Partition Leader Replicas ISRs
TutorialTopic 0 0 [0] [0]
__consumer_offsets 0 0 [0] [0]
...
...
Вывод будет включать TutorialTopic
и __consumer_offsets
, внутреннюю тему, используемую Kafka для хранения информации, связанной с клиентом. Вы можете спокойно игнорировать строки, начинающиеся с __consumer_offsets
.
Чтобы узнать больше о KafkaT, обратитесь к его репозиторию GitHub.
Заключение
Теперь у вас есть Apache Kafka, безопасно работающий на вашем сервере Ubuntu. Вы можете интегрировать Kafka в свой любимый язык программирования с помощью клиентов Kafka.
Чтобы узнать больше о Kafka, вы также можете обратиться к его документации.