Apache Kafka: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
 
Строка 1: Строка 1:
*[[Special:PermanentLink/76241|Старая версия страницы]]


'''Предварительные требования:'''
'''Предварительные требования:''' 1. Не меньше 4GB RAM на сервере. Инсталляция с меньшим количеством ОЗУ может закончиться с ошибкой "out of memory" от JVM при старте.
*1. Не меньше 4GB RAM на сервере. Инсталляция с меньшим количеством ОЗУ может закончиться с ошибкой "out of memory" от JVM при старте.
*2. На сервере должен быть установлен OpenJDK не менее 8 версии.


== Шаг 1. Создание пользователя ==
Так как сервер Kafka обрабатывает запросы, получаемые из сети Интернет, он создаст специального пользователя. Это сведёт к минимуму ущерб, нанесённый серверу Kafka, в случае компроментации.
Так как сервер Kafka обрабатывает запросы, получаемые из сети Интернет, необходимо создать специального пользователя. Это сведёт к минимуму ущерб, нанесённый серверу Kafka, в случае компроментации.
Мы создадим отдельного пользователя с именем Kafka. Конечно кроме него на сервере неплохо бы иметь и другого пользователя с правами sudo, для выполнения других задач администрирования, не относящихся к обслуживанию сервера Kafka.
Установим sudo:
<pre> # apt-get install sudo </pre>
Разрешим использовать sudo только пользователяем из группы wheel
<pre> # control sudowheel enable </pre>
Создаём пользователя kafka с домашней директорией:
<pre> # useradd kafka -m </pre>
Задаём пароль:
<pre> # passwd kafka </pre>
Добавим пользователя kafka в группу wheel:
<pre> # usermod -aG wheel kafka </pre>
Ну и собственно логинимся под свежесозданным пользователем:
<pre> # su -l kafka </pre>


== Шаг 2. Начало установки Kafka ==
При установке Kafka автоматически установится нужная версия Java.
В первую очередь установим java:
 
<pre> $ sudo apt-get install java-1.8.0-openjdk </pre>
Установку, настройку и тестирование сервера нужно делать от суперпользователя.
Создадим директорию для скачивания исходников
 
<pre> $ mkdir ~/Downloads && cd ~/Downloads </pre>
==Установка==
Скачиваем актуальную версию кафки:
# apt-repo test 350191
<pre> $ wget -O kafka.tgz https://www.apache.org/dist/kafka/2.8.0/kafka_2.13-2.8.0.tgz </pre>
# systemctl enable --now kafka
Создаём каталог с именем kafka, и сразу переходим в него:
 
<pre> $ mkdir ~/kafka && cd ~/kafka </pre>
Файлы сервера располагаются в {{path|/usr/lib/kafka}}
После чего распаковываем в него скачанный архив с Apache Kafka
 
<pre> $ tar -xvzf ~/Downloads/kafka.tgz --strip 1 </pre>
== Конфигурирование сервера Kafka ==
Файлы конфигурации сервера располагаются в {{path|/etc/kafka}}


== Шаг 3. Конфигурирование сервера Kafka ==
По умолчанию сервер Kafka не позволяет нам удалить тему, категории, группы, или
По умолчанию сервер Kafka не позволяет нам удалить тему, категории, группы, или
имя канала в котором могут публиковаться сообщения. Для исправления такого поведения
имя канала в котором могут публиковаться сообщения. Для исправления такого поведения
предлагается отредактировать конфигурационный файл server.properties.
предлагается отредактировать конфигурационный файл server.properties.
Необходимо добавить в конец этого файла настройки, которые позволят удалить темы Kafka:
Необходимо добавить в конец этого файла настройки, которые позволят удалить темы Kafka:
<pre> $ echo "delete.topic.enable = true" >> ~/kafka/config/server.properties </pre>
<pre> $ echo "delete.topic.enable = true" >> /etc/kafka/kraft/server.properties </pre>
 
== Шаг 4. Создаём systemd unit файл, и запускаем сервер Kafka ==
На этом шаге необходимо создать файлы модулей sytemd для служб Kafka.
 
'''Создание сервиса Zookeeper'''
Поскольку для управления состоянием кластера и конфигурациями Kafka использует службу Zookeeper, то сначала необходимо сконфигурировать сервис systemd для этой службы.
Для детального изучения zookeeper лучше посетить сайт с официальной документацией - https://zookeeper.apache.org/doc/current/index.html
<pre> $ vim /etc/systemd/system/zookeeper.service </pre>
Наполняем следующим содержимым:
<pre>
[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
</pre>
 
В секции [Service] определено использование скриптов start и stop для сервиса zookeeper, а так же
возможность автоматического рестарта при возникновении аномального поведения
Сохраняем файл и выходим из vim
 
'''Создание сервиса Kafka'''
<pre> $ sudo vim /etc/systemd/system/kafka.service </pre>
С следующим содержимым:
<pre>
[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
</pre>
 
В секции [Unit] определяем зависимость от сервиса zookeeper.
В секции [Service] определяем использование скриптов start и stop, и добавляем возможность
автоматического рестарта при возникновении аномального поведения
 
Сохраняемся и выходим.
 
'''Запуск сервиса Kafka'''
<pre> $ sudo systemctl start kafka </pre>
Проверяем логи старта
<pre> $ journalct -u kafka </pre>
Если всё успешно, вывод должен быть без ошибок, и последним сообщением должно значится что-то в духе:
<pre> Jul 26 14:08:59 kafka-centos systemd[1]: Started kafka.service. </pre>
 
Теперь kafka готова к работе и прослушивает порт 9092, проверить это можно с помощью ss:
<pre> $ netstat -tulpn | grep LISTEN </pre>
 
Включим запуск сервиса kafka по умолчанию:
<pre> $ sudo systemctl enable kafka </pre>
 
== Шаг 5. Тестирование инсталляции ==
Попробуйте отправить на сервер Kafka сообщение "Hello World", чтобы убедиться в корректном поведении сервера Kafka:
Публикация сообщений в kafka требует двух компонентов:
1. Producer - позволяет публиковать записи и данные по темам
2. Consumer - читает сообщения и данные по темам.
Создадим первый тестовый topic с названием TutorialTopic
<pre> $ ~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic </pre>
В случае успешного выполнения команды увидим надпись:
<pre> Created topic "TutorialTopic". </pre>
 
Далее вы можете создать producer из командной строки с помощью скрипта kafka-console-producer.sh он будет ожидать
в качестве аргументов имя хоста, порт и название темы.
Опубликуем строку Hello, World в тему TutorialTopic, набрав:
<pre> echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null </pre>
 
Далее создаем consumer, используя для этого скрипт kafka-console-consumer.sh . Он так же в качестве аргументов
будет ожидать имя хоста, порт и название темы.
Следующая команда прочтёт сообщение из TutorialTopic:
* обратите внимание на флаг --from-beginning, который позволяет прочесть сообщения опубликованные раньше, чем
consumer был запущен.
<pre> $ ~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning </pre>
Если всё работает нормально, команда выведет в консоли сообщение:
<pre> Hello, World </pre>
и будет дальше продолжать работать, пока не будет остановлена принудительно через ctrl^c


На этом основная часть установки сервера Kafka заканчивается.  
== Тестирование инсталляции ==
Для повышения удобства администрирования вы можете установить инструмент KafkaT, который позволит упростить выполнение ряда административных задач из командной строки.
*Создание топика
/usr/lib/kafka/bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
*Вывод списка созданных топиков
/usr/lib/kafka/bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092
Topic: quickstart-events        TopicId: NPmZHyhbR9y00wMglMH2sg PartitionCount: 1      ReplicationFactor: 1    Configs:
    Topic: quickstart-events Partition: 0    Leader: 0  Replicas: 0 Isr: 0
*Создание события
/usr/lib/kafka/bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
This is my first event
This is my second event
{{Note|Введите нужное количество строчек, нажимая {{button|Enter}} и потом завершите, нажав {{button|Ctrl}}+{{button|D}}.}}
*Вывод созданных событий:
/usr/lib/kafka/bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
This is my first event
This is my second event


[[Категория:HOWTO]][[Категория:Enterprise Software]]
[[Категория:HOWTO]][[Категория:Enterprise Software]]
[[Категория:EnterpriseApps]]
[[Категория:EnterpriseApps]]

Текущая версия от 10:18, 3 июня 2024

Предварительные требования: 1. Не меньше 4GB RAM на сервере. Инсталляция с меньшим количеством ОЗУ может закончиться с ошибкой "out of memory" от JVM при старте.

Так как сервер Kafka обрабатывает запросы, получаемые из сети Интернет, он создаст специального пользователя. Это сведёт к минимуму ущерб, нанесённый серверу Kafka, в случае компроментации.

При установке Kafka автоматически установится нужная версия Java.

Установку, настройку и тестирование сервера нужно делать от суперпользователя.

Установка

# apt-repo test 350191
# systemctl enable --now kafka

Файлы сервера располагаются в /usr/lib/kafka

Конфигурирование сервера Kafka

Файлы конфигурации сервера располагаются в /etc/kafka

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

 $ echo "delete.topic.enable = true" >> /etc/kafka/kraft/server.properties 

Тестирование инсталляции

  • Создание топика
/usr/lib/kafka/bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
  • Вывод списка созданных топиков
/usr/lib/kafka/bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092
Topic: quickstart-events        TopicId: NPmZHyhbR9y00wMglMH2sg PartitionCount: 1       ReplicationFactor: 1    Configs:
    Topic: quickstart-events Partition: 0    Leader: 0   Replicas: 0 Isr: 0
  • Создание события
/usr/lib/kafka/bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
This is my first event
This is my second event
Примечание: Введите нужное количество строчек, нажимая Enter и потом завершите, нажав Ctrl+D.
  • Вывод созданных событий:
/usr/lib/kafka/bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
This is my first event
This is my second event