![](/img/trans.png)
[英]Kafka Streams: Login module control flag not specified in JAAS config
[英]Kafka “Login module not specified in JAAS config”
我使用控制台腳本與使用sasl
保護的Kafka進行通信時遇到問題。 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通信並且它可以工作,但是在這里,使用控制台工具,它只是不起作用。 我試着尋找解決方案,但我找不到任何有用的東西。
誰能幫我這個?
有兩種方法可以為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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.