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);
私が間違っていることはありますか?
security.protocol
を指定する必要があります。それ以外の場合、デフォルトではKafkaクライアントはSASL
を使用しません。
クライアントのプロパティで、次を追加します。
properties.put("security.protocol", "SASL_SSL");
SASL_PLAINTEXT
もありますが、SASL_PLAINTEXT
ではなくPLAIN
メカニズムを使用することはお勧めできません。パスワードがクリアテキストで交換されるためです。