Кафка "Модуль входа не указан в конфигурации JAAS"
У меня проблема с общением с Kafka, защищенным с помощью sasl с помощью консольных скриптов. Kafka защищен с помощью sasl, слушатель - SASL_PLAINTEXT, а механизм - PLAIN.
Что я сделал: я попытался перечислить некоторые данные, используя один из скриптов kafka:
bin / kafka-consumer-groups.sh --bootstrap-сервер (адрес) - список
Тем не менее я получаю " WARN Bootstrap брокер (адрес) отключен (org.apache.kafka.clients.NetworkClient) " и команда завершается ошибкой, что понятно, потому что она защищена с помощью sasl.
Поэтому я попытался добавить имя пользователя / пароль клиента к этой команде. Сначала я попытался запустить скрипт kafka- console-consumer, я использовал --command-config, чтобы добавить необходимый файл. Я быстро обнаружил, что не могу добавить файл jaas напрямую, и мне нужно было использовать файл.properties, поэтому я и сделал.
Мой файл свойств (имейте в виду, что в скобках указаны "цензурированные" данные, я не могу поместить все реальные данные здесь):
bootstrap.servers=(address)
zookeeper.connect=127.0.0.1:2181
zookeeper.connection.timeout.ms=6000
sasl.jaas.config=(path)/consumer_jaas.conf
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
group.id=(group)
Мой файл jaas:
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username=(username)
password=(password);
};
Этот jaas-файл работает в моих стандартных java-приложениях.
Однако, когда я пытаюсь запустить скрипт kafka-consumer-groups или kafka-console-consumer, я получаю эту ошибку:
Exception in thread "main" org.apache.kafka.common.KafkaException: java.lang.IllegalArgumentException: Login module not specified in JAAS config
at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:94)
at org.apache.kafka.common.network.ChannelBuilders.create(ChannelBuilders.java:93)
at org.apache.kafka.common.network.ChannelBuilders.clientChannelBuilder(ChannelBuilders.java:51)
at org.apache.kafka.clients.ClientUtils.createChannelBuilder(ClientUtils.java:84)
at kafka.admin.AdminClient$.create(AdminClient.scala:229)
at kafka.admin.AdminClient$.create(AdminClient.scala:223)
at kafka.admin.AdminClient$.create(AdminClient.scala:221)
at kafka.admin.ConsumerGroupCommand$KafkaConsumerGroupService.createAdminClient(ConsumerGroupCommand.scala:454)
at kafka.admin.ConsumerGroupCommand$KafkaConsumerGroupService.<init>(ConsumerGroupCommand.scala:389)
at kafka.admin.ConsumerGroupCommand$.main(ConsumerGroupCommand.scala:65)
at kafka.admin.ConsumerGroupCommand.main(ConsumerGroupCommand.scala)
Caused by: java.lang.IllegalArgumentException: Login module not specified in JAAS config
at org.apache.kafka.common.security.JaasConfig.<init>(JaasConfig.java:68)
at org.apache.kafka.common.security.JaasUtils.jaasConfig(JaasUtils.java:59)
at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:85)
Этот jaas-файл является прямой копией файла, который я использую в java-приложении, которое взаимодействует с kafka, и он работает, однако здесь, с использованием консольных инструментов, он просто не работает. Я пытался найти решение, но не могу найти ничего полезного.
Кто-нибудь может мне с этим помочь?
1 ответ
Есть 2 способа предоставить конфигурацию JAAS клиентам Kafka.
Через собственность клиента:
sasl.jaas.config
, В этом случае вы устанавливаете его на фактическую запись конфигурации JAAS. Например, ваш файл конфигурации становится:bootstrap.servers=(address) zookeeper.connect=127.0.0.1:2181 zookeeper.connection.timeout.ms=6000 sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="(username)" password="(password)"; security.protocol=SASL_PLAINTEXT sasl.mechanism=PLAIN group.id=(group)
Как вы уже поняли, вы можете использовать
--command-config
передать файл свойствkafka-consumer-groups.sh
,Через свойство Java:
java.security.auth.login.config
, В этом случае вы указываете путь к файлу JAAS. Также, если вы установите его вKAFKA_OPTS
,kafka-consumer-groups.sh
подберут его автоматически.export KAFKA_OPTS="-Djava.security.auth.login.config=(path)/consumer_jaas.conf"