Кафка "Модуль входа не указан в конфигурации 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"
    
Другие вопросы по тегам