kafka“jaas config中未指定登录模块”

yx2lnoni  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(1521)

我和Kafka的沟通有问题 sasl 使用控制台脚本。Kafka受到 sasl ,侦听器为 SASL_PLAINTEXT 机制是 PLAIN .
我所做的:我试着用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-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通信,但是在这里,使用控制台工具,它不起作用。我试着寻找解决办法,但找不到任何有用的。
有人能帮我吗?

5lhxktic

5lhxktic1#

有两种方法可以向kafka客户机提供jaas配置。
通过客户财产: 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"

相关问题