Запуск кластера 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