Перейти к основному содержимому
Версия: 5.1

Запуск кластера Kafka

Для корректного формирования кворума контроллеров важен порядок старта узлов кластера Kafka. В первую очередь должны быть запущены узлы с ролью controller, чтобы сформировался кворум и был выбран лидер. Далее запускаются узлы с ролью broker.

Запустить сервис Kafka на всех узлах, начиная с узлов с ролью controller:

systemctl enable --now kafka

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

Далее для своей схемы Вам нужно создать топики и настроить ACL.

Ниже приведен пример создания топика с использованием ACL. Все действия выполняются на первом узле с ролью broker, где размещен конфигурационный файл /app/certs/adminkfk.properties. Для обеспечения возможности клиентам записывать и читать данные из топиков, необходимо создать пользователей Kafka. Имена этих пользователей будут соответствовать значениям CN в клиентских сертификатах согласно правилу сопоставления, заданному через параметр ssl.principal.mapping.rules в файле broker.properties. Эта настройка применяется на каждом узле с ролью broker. В приведенном примере правила выполняют маппинг CN из сертификатов клиентов на соответствующие учетные записи Kafka:

ssl.principal.mapping.rules=RULE:^CN=producer_hosts[1-2],O=Work,L=Moscow,ST=Moscow,C=RU$/producer_user/L,RULE:^CN=consumer_hosts[1-3],O=Work,L=Moscow,ST=Moscow,C=RU$/consumer_user/L
Обратите внимание!

Корневые сертификаты клиентов и Kafka должны совпадать.

Команда для просмотра списка существующих топиков:

$ JAVA_HOME=/app/jdk/ /app/kafka/bin/kafka-topics.sh --command-config /app/certs/adminkfk.properties --bootstrap-server 192.168.0.54:9092 –list

Команда для создания топика:

$ JAVA_HOME=/app/jdk/ /app/kafka/bin/kafka-topics.sh  --command-config /app/certs/adminkfk.properties  --bootstrap-server 192.168.0.54:9092 --create --topic test_topic  --partitions 5 --replication-factor 5

Команда для удаления топика:

$ JAVA_HOME=/app/jdk/ /app/kafka/bin/kafka-topics.sh  --command-config /app/certs/adminkfk.properties  --delete --bootstrap-server 192.168.0.54:9092 --topic test_topic 

Для предоставления прав на запись в топики test-topic и test-topic1 создадим пользователя producer-user.

Имя пользователя указывается параметром User, а имя топика — через параметр --topic. Параметр --allow-host определяет, с каких хостов разрешен доступ пользователям, перечисленных в параметре --allow-principal. Атрибут --producer указывает, что настройки предназначены для клиентов, которые будут публиковать записи в топик. В одной команде можно указать сразу несколько топиков. Или возможно использовать * для параметра --topic, что дает доступ сразу ко всем топикам.

Пример команды:

$ JAVA_HOME=/app/jdk/ /app/kafka/bin/kafka-acls.sh \
--command-config /app/certs/adminkfk.properties \
--bootstrap-server 192.168.0.54:9092 \
--add \
--allow-principal User:producer-user \
--allow-host 192.168.0.71 \
--allow-host 192.168.0.72 \
--producer \
--topic test-topic \
--topic test-topic1

Для предоставления прав на чтение из топика test-topic создадим пользователя consumer-user.

Имя пользователя указывается параметром User, имя топика — с помощью параметра --topic. Параметр --allow-host определяет список хостов, с которых разрешен доступ пользователям, перечисленным в параметре --allow-principal. Атрибут --consumer указывает, что настраиваются права на чтение, а параметр --group задает имя потребительской группы, используемой для многопоточной обработки. В одной команде можно указать несколько топиков или несколько групп. Возможно использовать * для параметра --topic, что дает доступ сразу ко всем топикам. Должна быть указана минимум одна consumer-group при настройке ACL.

Пример команды:

$ JAVA_HOME=/app/jdk/ /app/kafka/bin/kafka-acls.sh \
--command-config /app/certs/adminkfk.properties \
--bootstrap-server 192.168.0.54:9092 \
--add \
--allow-principal User:consumer-user \
--allow-host 192.168.0.81 \
--allow-host 192.168.0.82 \
--consumer \
--group test-group1 \
--topic test-topic

Для проверки настроек конкретного топика можно использовать следующую команду:

$ JAVA_HOME=/app/jdk/ /app/kafka/bin/kafka-topics.sh \
--command-config /app/certs/adminkfk.properties \
--bootstrap-server 192.168.0.54:9092 \
--describe \
--topic test-topic