Kafka “登录模块未在 JAAS 配置中指定”

2022-09-01 18:45:52

我在使用控制台脚本与Kafka进行通信时遇到问题。Kafka 是用 来保护的,侦听器是 和 机制是 。saslsaslSASL_PLAINTEXTPLAIN

我做了什么:我尝试使用kafka脚本之一列出一些数据:

bin/kafka-consumer-groups.sh --bootstrap-server (address) --list

但是我得到

WARN Bootstrap broker (address) disconnected (org.apache.kafka.clients.NetworkClient)

命令失败,这是可以理解的,因为它是用 sasl 保护的。

所以我尝试了如何将客户端用户名/密码添加到该命令中。首先,我尝试运行脚本,我过去常常添加必要的文件。我很快发现我不能直接添加文件,我需要使用文件,所以我做了。kafka-console-consumer--command-configjaas.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)

My jaas file:

KafkaClient {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username=(username)
    password=(password);
};

此文件适用于我的标准 Java 应用程序。jaas

但是,当我尝试运行脚本或 时,我收到此错误:kafka-consumer-groupskafka-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)

这个文件是我在java应用程序中使用的文件的直接副本,它与kafka通信并且它的工作原理,但是在这里,使用控制台工具,它只是不起作用。我试图寻找解决方案,但我找不到任何有用的东西。jaas

任何人都可以帮我吗?


答案 1

有 2 种方法可以向 Kafka 客户机提供 JAAS 配置。

  • 通过客户端属性:。在这种情况下,请将其设置为实际的 JAAS 配置条目。例如,您的配置文件将变为:sasl.jaas.config

    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-configkafka-consumer-groups.sh

  • 通过 Java 属性:。在这种情况下,将其设置为 JAAS 文件的路径。另外,如果您将其设置为 ,将自动拾取它。java.security.auth.login.configKAFKA_OPTSkafka-consumer-groups.sh

    export KAFKA_OPTS="-Djava.security.auth.login.config=(path)/consumer_jaas.conf"
    

答案 2

推荐