【问题标题】:Unexpected Kafka request of type METADATA during SASL handshake在 SASL 握手期间出现 METADATA 类型的意外 Kafka 请求
【发布时间】:2020-08-14 15:10:05
【问题描述】:

我正在尝试使用 SASL Plain 将 Kafka Java 客户端连接到 Kafka 代理。但是当我尝试从 Producer 发送消息时,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);

我做错了什么吗?

【问题讨论】:

    标签: java apache-kafka kafka-producer-api


    【解决方案1】:

    需要指定security.protocol,否则默认情况下,Kafka客户端不使用SASL

    在您的客户端属性中,添加:

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

    还有SASL_PLAINTEXT,但不建议在SASL_PLAINTEXT 上使用PLAIN 机制,因为密码将以明文形式交换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-17
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 2018-01-21
      • 2019-01-19
      • 2016-02-02
      相关资源
      最近更新 更多