You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kafka KRaft集群SASL_SSL配置问题:SASL握手时METADATA请求错误

Kafka KRaft集群SASL_SSL配置报错:Broker间通信认证失败

我搭建了一个基于mTLS正常运行的Kafka KRaft集群,现在想切换为SASL_SSL配置,但Broker监听器出现如下认证失败错误:

INFO [SocketServer listenerType=BROKER, nodeId=1] Failed authentication with /172.31.0.228 (channelId=172.31.21.224:9094-172.31.0.228:48788-0) (Unexpected Kafka request of type METADATA during SASL handshake.) (org.apache.kafka.common.network.Selector)

集群包含3个节点,Broker与Controller合一。目前未连接任何消费者/生产者,错误由Broker间通信触发,但Controller监听器运行正常。

已尝试多轮配置调整,认为当前配置接近正确,已知该错误可能与协议不匹配有关,但所有配置均已设置为使用SASL_SSL,错误描述不够清晰,无法明确排查方向。

以下是当前的server.properties配置:

# server.properties configuration

# Listeners
listeners=CONTROLLER://0.0.0.0:9093,BROKER://0.0.0.0:9094
advertised.listeners=BROKER://<BROKER_HOST>:9094
listener.security.protocol.map=CONTROLLER:SASL_SSL,BROKER:SASL_SSL

controller.listener.names=CONTROLLER
inter.broker.listener.name=BROKER

# SASL
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.controller.protocol=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN

# JAAS
listener.name.controller.plain.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
    username="admin" \
    password="test123" \
    user_admin="test123";

listener.name.broker.plain.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
    username="admin" \
    password="test123" \
    user_admin="test123";

# SSL
security.protocol = SASL_SSL
ssl.enabled.protocols=TLSv1.3,TLSv1.2
ssl.keystore.type=PEM
ssl.keystore.location=/opt/kafka/certs/keystore.pem
ssl.key.password=<password>
ssl.truststore.type=PEM
ssl.truststore.location=/opt/kafka/certs/truststore.pem

问题排查与修复方案

核心原因

该错误表明Broker节点在BROKER监听器的SASL握手流程未完成时,收到了METADATA请求,本质是节点间的安全协议配置不一致、JAAS/SSL配置未生效或网络可达性问题。

具体修复步骤

  1. 修正advertised.listeners配置
    每个节点的<BROKER_HOST>必须替换为其他节点可访问的真实IP或主机名,不能保留占位符。云环境或容器部署中,需确认节点间网络端口(9094)互通。

  2. 移除全局security.protocol配置
    security.protocol是客户端配置,Broker端无需设置,该配置会干扰监听器的安全协议映射逻辑。直接删除security.protocol = SASL_SSL这一行。

  3. 验证SSL证书一致性
    确保所有节点的keystore和truststore文件完全一致,证书可互相验证。用以下命令检查单节点SSL端口是否正常:

    openssl s_client -connect <BROKER_HOST>:9094 -tls1_3
    

    若返回证书信息且无错误,说明SSL配置单节点有效。

  4. 确认JAAS配置全节点同步
    所有节点的listener.name.broker.plain.sasl.jaas.config必须完全一致,确保用户名、密码以及授权用户的配置无差异。

  5. 重启所有节点
    修改配置后必须重启全部3个Broker/Controller节点,确保新配置完全生效。


验证方法

重启完成后,查看Broker日志是否仍存在认证失败错误。可通过创建测试主题验证Broker间通信:

./bin/kafka-topics.sh --create --topic test-topic --partitions 3 --replication-factor 3 --bootstrap-server <BROKER_HOST>:9094 --command-config client.properties

其中client.properties需包含SASL_SSL客户端配置:

security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="test123";
ssl.truststore.type=PEM
ssl.truststore.location=/opt/kafka/certs/truststore.pem

内容的提问来源于stack exchange,提问作者eazy-b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 13:10:59