2017-08-18 23 views
3

コンソールスクリプトを使用してsaslで保護されたKafkaとの通信に問題があります。 Kafkaはsaslで保護され、listenerはSASL_PLAINTEXTであり、メカニズムはPLAINです。私が何をしたかKafka「JAAS設定でログインモジュールが指定されていません」

: 私はカフカのいずれかのスクリプトを使用していくつかのデータを一覧表示しようとした:

ビン/ kafka-consumer-groups.sh --bootstrapサーバ(アドレス)

--listしかし、 "WARNブートストラップブローカ(アドレス)が切断されています(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アプリケーションで動作します。

しかし、私はカフカ-消費者グループのスクリプトやカフカ・コンソール・消費者のいずれかを実行しようとしているとき、私はこのエラーを取得:

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ファイルは、そのファイルを直接コピーです私はkafkaと通信するJavaアプリケーションで使用していますが、ここではコンソールツールを使用していますが、動作しません。私は解決策を探してみましたが、役に立たないものは見つかりませんでした。

誰もがこれを手伝ってくれますか?

答えて

4

KafkaクライアントにJAAS設定を提供する2つの方法があります。

  • クライアントプロパティ: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) 
    

    、あなたは性質がkafka-consumer-groups.shにファイルを渡すために--command-configを使用することができます。

  • 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" 
    
+0

私は.propertiesファイルに直接JAAS構成エントリを入れて、それが働きました。今私はこれらのスクリプトを間違いなく使用することができます。なぜ外部ファイルに問題があるのか​​分かりません。ありがとうございました! – Tomasz

+1

sasl.jaas.configを使用する場合は、JAAS構成エントリにのみ設定できます。このエントリは、ファイルへのパスでは機能しません。 Javaプロパティとは逆に、ファイルへのパスでのみ動作します。 –

関連する問題