kafka-topics.sh适配SASL_PLAINTEXT认证失败问题咨询
Kafka SASL_PLAINTEXT认证下kafka-topics.sh调用失败解决方案
核心报错原因:你遇到的报错本质是客户端未读取到SASL相关配置,未完成SASL握手就直接发送业务请求,具体是你把客户端安全协议、SASL机制的配置错误放到了JAAS文件中,这类连接配置不属于JAAS的配置范畴,导致客户端默认以普通PLAINTEXT协议访问启用了SASL_PLAINTEXT的服务端。
步骤1:修正JAAS配置文件
JAAS文件仅需要配置登录认证的账户密码信息,移除多余的安全协议、SASL机制配置,修正后内容如下:
Client { org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="some-pass-1"; };
步骤2:新增客户端专用配置文件
新建client.properties文件,存放客户端连接所需的安全相关配置:
security.protocol=SASL_PLAINTEXT sasl.mechanism=PLAIN
步骤3:正确执行kafka-topics.sh命令
执行命令前先指定JAAS文件路径,同时通过--command-config参数传入客户端配置:
# 先指定JAAS文件路径 export KAFKA_OPTS="-Djava.security.auth.login.config=/替换为你的JAAS文件绝对路径/jaas.conf" # 执行topic操作,以查看topic列表为例 ./kafka-topics.sh --list --bootstrap-server 10.10.10.16:9092 --command-config /替换为你的配置路径/client.properties
额外排查点
- 确认服务端和客户端使用的Kafka大版本一致,避免跨版本协议兼容问题
- 确认JAAS文件、client.properties文件的路径正确,执行命令的用户对文件有可读权限
- 确认JAAS中配置的用户名、密码与服务端
listener.name.sasl_plaintext.plain.sasl.jaas.config中配置的对应用户信息完全一致 - 不要混用配置项的分隔符:Kafka配置文件中统一用
.作为分隔符(如security.protocol),只有JVM系统参数才会用_替代.
内容的提问来源于stack exchange,提问作者Alex.P
相关产品推荐
相关产品推荐

