web-dev-qa-db-ja.com

予期しないKafka SASLハンドシェイク中のタイプMETADATAのリクエスト

Kafka JavaクライアントをSASLプレーンを使用してKafkaブローカに接続しようとしています。しかし、プロデューサーからのメッセージ、Kafkaサーバーは次のエラーを記録します:

[2020-04-30 14:48:14,955] INFO [SocketServer brokerId=0] Failed authentication with /127.0.0.1 (Unexpected Kafka request of type METADATA during SASL handshake.) (org.Apache.kafka.common.network.Selector)

ルックによって、プロデューサーはSASLハンドシェイクの前にメタデータ要求を送信しようとします。メッセージを送信する前にハンドシェイクを行うにはどうすればよいですか?

以下は私のkafka_server_jaas.confファイルは、Kafkaサーバーに使用されます。

KafkaServer {
    org.Apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret"
    user_admin="admin-secret";
};

Client {
    org.Apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret";
};

以下は私のzookeeper_jaas.confファイル。飼育係が使用します。

Server {
    org.Apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret"
    user_admin="admin-secret";
};

私のJavaプロデューサーで、次のプロパティを設定しました:

Properties properties = new Properties();
properties.put("bootstrap.servers", "localhost:9092");
properties.put("sasl.jaas.config", "org.Apache.kafka.common.security.plain.PlainLoginModule required username=\"admin\" password=\"admin_secret\"");
properties.put("sasl.mechanisms", "PLAIN");
properties.put("value.serializer", "org.Apache.kafka.common.serialization.StringSerializer");
KafkaProducer kafkaProducer = new KafkaProducer(properties);

私が間違っていることはありますか?

1
ThisaruG

security.protocol を指定する必要があります。それ以外の場合、デフォルトではKafkaクライアントはSASLを使用しません。

クライアントのプロパティで、次を追加します。

properties.put("security.protocol", "SASL_SSL");

SASL_PLAINTEXTもありますが、SASL_PLAINTEXTではなくPLAINメカニズムを使用することはお勧めできません。パスワードがクリアテキストで交換されるためです。

2
Mickael Maison