簡體   English   中英

Kafka“未在JAAS配置中指定登錄模塊”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM