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

Как установить Apache Kafka на Ubuntu 18.04


Автор выбрал программу Write for DOnations.

Введение

КроликMQ. Хотя он обычно используется в качестве системы обмена сообщениями публикации/подписки, многие организации также используют его для агрегирования журналов, поскольку он предлагает постоянное хранилище для опубликованных сообщений.

Система обмена сообщениями публикации/подписки позволяет одному или нескольким производителям публиковать сообщения без учета количества потребителей или того, как они будут обрабатывать сообщения. Подписанные клиенты автоматически уведомляются об обновлениях и создании новых сообщений. Эта система более эффективна и масштабируема, чем системы, в которых клиенты периодически опрашивают, чтобы определить, доступны ли новые сообщения.

В этом руководстве вы установите и будете использовать Apache Kafka 2.1.1 в Ubuntu 18.04.

Предпосылки

Чтобы следовать дальше, вам понадобятся:

  • Один сервер Ubuntu 18.04 и пользователь без полномочий root с привилегиями sudo. Выполните шаги, указанные в этом руководстве, если у вас нет настроенного пользователя без полномочий root.
  • Не менее 4 ГБ ОЗУ на сервере. Установка без такого объема ОЗУ может привести к сбою службы Kafka, когда виртуальная машина Java (JVM) выдаст исключение «Недостаточно памяти» во время запуска.
  • эти инструкции по установке определенных версий OpenJDK. Kafka написана на Java, поэтому для нее требуется JVM; однако его сценарий запуска оболочки имеет ошибку определения версии, из-за которой он не запускается с версиями JVM выше 8.

Шаг 1 — Создание пользователя для Kafka

Поскольку Kafka может обрабатывать запросы по сети, вам следует создать для нее выделенного пользователя. Это минимизирует ущерб для вашего компьютера с Ubuntu в случае компрометации сервера Kafka. На этом этапе мы создадим выделенного пользователя kafka, но вы должны создать другого пользователя без полномочий root для выполнения других задач на этом сервере после завершения настройки Kafka.

Войдите в систему как пользователь sudo без полномочий root, создайте пользователя с именем kafka с помощью команды useradd:

  1. sudo useradd kafka -m

Флаг -m гарантирует, что для пользователя будет создан домашний каталог. Этот домашний каталог, /home/kafka, будет действовать как каталог нашей рабочей области для выполнения команд в следующих разделах.

Установите пароль с помощью passwd:

  1. sudo passwd kafka

Добавьте пользователя kafka в группу sudo с помощью команды adduser, чтобы у него были права, необходимые для установки зависимостей Kafka:

  1. sudo adduser kafka sudo

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

  1. su -l kafka

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

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

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

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

  1. mkdir ~/Downloads

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

  1. curl "https://www.apache.org/dist/kafka/2.1.1/kafka_2.11-2.1.1.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.11-2.1.1/) внутри него.

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

Шаг 3 — Настройка сервера Kafka

Поведение Kafka по умолчанию не позволяет нам удалять тему, категорию, группу или имя канала, в котором могут публиковаться сообщения. Чтобы изменить это, давайте отредактируем файл конфигурации.

Параметры конфигурации Kafka указаны в server.properties. Откройте этот файл с помощью nano или вашего любимого редактора:

  1. nano ~/kafka/config/server.properties

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

delete.topic.enable = true

Сохраните файл и выйдите из nano. Теперь, когда мы настроили Kafka, мы можем перейти к созданию файлов модулей systemd для запуска и включения их при запуске.

Шаг 4 — Создание файлов модулей Systemd и запуск сервера Kafka

В этом разделе мы создадим юнит-файлы systemd для сервиса Kafka. Это поможет нам выполнять общие действия службы, такие как запуск, остановка и перезапуск Kafka, в соответствии с другими службами Linux.

Zookeeper — это служба, которую Kafka использует для управления состоянием и конфигурациями своего кластера. Он обычно используется во многих распределенных системах как неотъемлемый компонент. Если вы хотите узнать об этом больше, посетите официальную документацию Zookeeper.

Создайте файл модуля для 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 journalctl -u kafka

Вы должны увидеть вывод, подобный следующему:

Output
Jul 17 18:38:59 kafka-ubuntu systemd[1]: Started kafka.service.

Теперь у вас есть сервер Kafka, прослушивающий порт 9092.

Хотя мы запустили службу kafka, если бы мы перезагрузили наш сервер, она не запустилась бы автоматически. Чтобы включить kafka при загрузке сервера, запустите:

  1. sudo systemctl enable kafka

Теперь, когда мы запустили и включили службы, давайте проверим установку.

Шаг 5 — Проверка установки

Давайте опубликуем и воспользуемся сообщением «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.

Опубликуйте строку 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

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

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

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

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

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

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

  1. sudo gem install kafkat

KafkaT использует .kafkatcfg в качестве файла конфигурации для определения каталогов установки и журналов вашего сервера Kafka. Он также должен иметь запись, указывающую KafkaT на ваш экземпляр ZooKeeper.

Создайте новый файл с именем .kafkatcfg:

  1. nano ~/.kafkatcfg

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

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

Теперь вы готовы использовать KafkaT. Для начала, вот как вы можете использовать его для просмотра сведений обо всех разделах Kafka:

  1. kafkat partitions

Вы увидите следующий вывод:

Output
Topic Partition Leader Replicas ISRs TutorialTopic 0 0 [0] [0] __consumer_offsets 0 0 [0] [0] ... ...

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

Чтобы узнать больше о KafkaT, обратитесь к его репозиторию GitHub.

Шаг 7 — Настройка многоузлового кластера (необязательно)

Если вы хотите создать кластер с несколькими брокерами, используя больше машин Ubuntu 18.04, вам следует повторить Шаг 1, Шаг 4 и Шаг 5 на каждой из новых машин. Кроме того, вы должны внести следующие изменения в файл server.properties для каждого из них:

  • Значение свойства broker.id должно быть изменено таким образом, чтобы оно было уникальным во всем кластере. Это свойство однозначно идентифицирует каждый сервер в кластере и может иметь любую строку в качестве значения. Например, server1, server2 и т. д.
  • Значение свойства zookeeper.connect должно быть изменено таким образом, чтобы все узлы указывали на один и тот же экземпляр ZooKeeper. Это свойство указывает адрес экземпляра Zookeeper в формате :. Например, 203.0.113.0:2181, 203.0.113.1:2181 и т. д.

Если вы хотите иметь несколько экземпляров ZooKeeper для своего кластера, значение свойства zookeeper.connect на каждом узле должно быть идентичной строкой, разделенной запятыми, в которой перечислены IP-адреса и номера портов всех ZooKeeper. экземпляры.

Шаг 8 — Ограничение пользователя Kafka

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

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

  1. sudo deluser kafka sudo

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

  1. sudo passwd kafka -l

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

  1. sudo su - kafka

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

  1. sudo passwd kafka -u

Теперь вы успешно ограничили права администратора пользователя kafka.

Заключение

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