Как установить Apache Kafka на Debian 9

Автор выбрал Free и Open Source Fund, чтобы получить пожертвование как часть Write for DOnations program.

Вступление

Apache Kafka - популярный распределенный брокер сообщений, разработанный для эффективной обработки больших объемов данных в реальном времени. Кластер Kafka не только обладает высокой масштабируемостью и отказоустойчивостью, но также имеет гораздо более высокую пропускную способность по сравнению с другими брокерами сообщений, такими как ActiveMQ и https: //www.rabbitmq. ком / [RabbitMQ]. Хотя он обычно используется как система обмена сообщениями publish / subscribe, многие организации также используют его для агрегирования журналов, поскольку он предлагает постоянное хранилище для опубликованных сообщений.

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

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

Предпосылки

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

  • Один сервер Debian 9 и пользователь без полномочий root с правами sudo. Выполните действия, указанные в этом guide, если у вас нет настроенного пользователя без полномочий root.

  • Не менее 4 ГБ оперативной памяти на сервере. Установки без этого объема ОЗУ могут привести к сбою службы Kafka, поскольку виртуальная машина Java выдает исключение «Недостаточно памяти» во время запуска.

  • OpenJDK 8 установлен на вашем сервере. Чтобы установить эту версию, следуйте these инструкциям на установка определенных версий OpenJDK. Кафка написана на Java, поэтому она требует JVM; тем не менее, его сценарий запуска оболочки имеет ошибку определения версии, из-за которой он не запускается с версиями JVM выше 8.

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

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

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

sudo useradd kafka -m

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

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

sudo passwd kafka

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

sudo adduser kafka sudo

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

su -l kafka

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

Шаг 2 - Загрузка и распаковка бинарных файлов Kafka

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

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

mkdir ~/Downloads

Установите + curl +, используя + apt-get +, чтобы вы могли загружать удаленные файлы:

sudo apt-get update && sudo apt-get install -y curl

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

curl "https://www.apache.org/dist/kafka//kafka_.tgz" -o ~/Downloads/kafka.tgz

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

mkdir ~/kafka && cd ~/kafka

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

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

Мы задаем флаг + - strip 1 +, чтобы гарантировать, что содержимое архива извлечено в самом + ~ / kafka / +, а не в другом каталоге (например, + ~ / kafka / kafka _ / +) внутри этого

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

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

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

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

nano ~/kafka/config/server.properties

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

~ / Kafka / конфигурации / server.properties

delete.topic.enable = true

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

Шаг 4 - Создание файлов системных модулей и запуск сервера Kafka

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

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

Создайте файл модуля для + zookeeper +:

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

Введите следующее определение объекта в файл:

/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

Введите следующее определение объекта в файл:

/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 journalctl -u kafka

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

OutputMar 23 13:31:48 kafka systemd[1]: Started kafka.service.

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

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

sudo systemctl enable kafka

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

Шаг 5 - Тестирование установки

Давайте опубликуем и примем сообщение * «Hello World» *, чтобы убедиться, что сервер Kafka работает правильно. Публикация сообщений в Кафке требует:

  • Producer, который позволяет публикацию записей и данных по темам.

  • Consumer, который читает сообщения и данные из тем.

Сначала создайте тему с именем + TutorialTopic +, набрав:

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

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

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

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

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

OutputHello, World

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

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

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

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

sudo apt install ruby ruby-dev build-essential

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

sudo gem install kafkat

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

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

nano ~/.kafkatcfg

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

~ / .Kafkatcfg

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

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

kafkat partitions

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

OutputTopic                 Partition   Leader      Replicas        ISRs
TutorialTopic         0             0         [0]             [0]
__consumer_offsets    0               0           [0]                           [0]
...
...

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