SASL 握手期间意外的 METADATA 类型的 Kafka 请求
Unexpected Kafka request of type METADATA during SASL handshake
我正在尝试使用 SASL Plain 将 Kafka Java 客户端连接到 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
机制,因为密码将以明文形式交换。
我正在尝试使用 SASL Plain 将 Kafka Java 客户端连接到 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
机制,因为密码将以明文形式交换。