Поиск по сайту:

Как установить 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:

  1. sudo adduser kafka

Следуйте инструкциям, чтобы установить пароль и создать пользователя kafka.

Затем добавьте пользователя kafka в группу sudo с помощью команды adduser. Вам нужны эти привилегии для установки зависимостей Kafka:

  1. sudo adduser kafka sudo

Теперь ваш пользователь kafka готов. Войдите в учетную запись kafka с помощью su:

  1. su -l kafka

Теперь, когда вы создали пользователя для Kafka, вы готовы загрузить и извлечь двоичные файлы Kafka.

Шаг 2 — Загрузка и извлечение двоичных файлов Kafka

На этом шаге вы загрузите и извлечете двоичные файлы Kafka в специальные папки в домашнем каталоге пользователя kafka.

Для начала создайте каталог /home/kafka с именем Downloads для хранения ваших загрузок:

  1. mkdir ~/Downloads

Используйте curl для загрузки двоичных файлов Kafka:

  1. curl "https://downloads.apache.org/kafka/2.8.2/kafka_2.13-2.8.2.tgz" -o ~/Downloads/kafka.tgz

Создайте каталог с именем kafka и перейдите в этот каталог. Вы будете использовать этот каталог в качестве базового каталога установки Kafka:

  1. mkdir ~/kafka && cd ~/kafka

Извлеките загруженный архив с помощью команды tar:

  1. 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 или вашего любимого редактора:

  1. 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:

  1. 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:

  1. 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 с помощью следующей команды:

  1. sudo systemctl start kafka

Чтобы убедиться, что сервер успешно запущен, проверьте журналы журнала для модуля kafka:

  1. 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 при загрузке сервера, выполните следующую команду:

  1. sudo systemctl enable zookeeper

Вы получите ответ о том, что символическая ссылка создана:

Output
Created symlink /etc/systemd/system/multi-user.target.wants/zookeeper.service → /etc/systemd/system/zookeeper.service.

Затем запустите эту команду:

  1. sudo systemctl enable kafka

Вы получите ответ о том, что символическая ссылка создана:

Output
Created 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:

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

Вы можете создать производителя из командной строки, используя скрипт kafka-console-producer.sh. В качестве аргументов он ожидает имя хоста сервера Kafka, порт и тему.

Вы получите ответ, что тема создана:

Output
Created topic TutorialTopic.

Теперь опубликуйте строку Hello, World в теме TutorialTopic:

  1. 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, который разрешает использование сообщений, которые были опубликованы до запуска потребителя:

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

Если проблем с конфигурацией нет, вы получите ответ Hello, World в своем терминале:

Output
Hello, World

Сценарий продолжит работу, ожидая публикации новых сообщений. Чтобы проверить это, откройте новое окно терминала и войдите на свой сервер. Не забудьте войти в систему как пользователь kafka:

  1. su -l kafka

В этом новом терминале запустите производителя для публикации второго сообщения:

  1. echo "Hello World from Sammy at DigitalOcean!" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null

Это сообщение будет загружено в выводе потребителя в исходном терминале:

Output
Hello, World Hello World from Sammy at DigitalOcean!

Когда вы закончите тестирование, нажмите CTRL+C, чтобы остановить потребительский скрипт в исходном терминале.

Вы установили и настроили сервер Kafka в Ubuntu 20.04. На следующем шаге вы выполните несколько быстрых задач, чтобы усилить безопасность вашего сервера Kafka.

Шаг 6 — Укрепление сервера Kafka

После завершения установки вы можете удалить права администратора пользователя kafka и усилить защиту сервера Kafka.

Прежде чем сделать это, выйдите из системы и снова войдите в нее как любой другой пользователь sudo без полномочий root. Если вы все еще используете тот же сеанс оболочки, с которого вы начали это руководство, введите exit.

Удалите пользователя kafka из группы sudo:

  1. sudo deluser kafka sudo

Чтобы еще больше повысить безопасность вашего сервера Kafka, заблокируйте пароль пользователя kafka с помощью команды passwd. Это действие гарантирует, что никто не сможет напрямую войти на сервер, используя эту учетную запись:

  1. sudo passwd kafka -l

Флаг -l блокирует команду смены пароля пользователя (passwd).

На данный момент только пользователь root или пользователь sudo может войти в систему как kafka с помощью следующей команды:

  1. sudo su - kafka

В будущем, если вы хотите разблокировать возможность смены пароля, используйте passwd с опцией -u:

  1. sudo passwd kafka -u

Теперь вы успешно ограничили права администратора пользователя kafka. Вы готовы начать использовать Kafka. При желании вы можете выполнить следующий шаг, который добавит KafkaT в вашу систему.

Шаг 7 — Установка KafkaT (необязательно)

KafkaT был разработан, чтобы улучшить вашу способность просматривать сведения о вашем кластере Kafka и выполнять определенные административные задачи из командной строки. Поскольку это драгоценный камень Ruby, вам понадобится Ruby для его использования. Вам также понадобится пакет build-essential для сборки других гемов, от которых зависит KafkaT.

Установите Ruby и пакет build-essential с помощью apt:

  1. sudo apt install ruby ruby-dev build-essential

Теперь вы можете установить KafkaT с помощью команды gem:

  1. 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:

  1. nano ~/.kafkatcfg

Добавьте следующие строки, чтобы указать необходимую информацию о вашем сервере Kafka и экземпляре Zookeeper:

{
  "kafka_path": "~/kafka",
  "log_path": "/home/kafka/logs",
  "zk_path": "localhost:2181"
}

Сохраните и закройте файл. Теперь вы готовы использовать KafkaT.

Чтобы просмотреть сведения обо всех разделах Kafka, попробуйте выполнить эту команду:

  1. 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, вы также можете обратиться к его документации.