Kafka两种认证方式下主题列表数量不一致问题咨询
Kafka不同监听器查询主题数量不一致的排查思路
核心排查方向
你通过PLAINTEXT协议的9092端口查到107个主题,SASL_SSL协议的9093端口查到141个,差异大概率出在权限控制或客户端/监听器的隐性配置差异上,以下是具体排查步骤:
1. 对比两个客户端的ACL权限
- PLAINTEXT模式下,Kafka默认使用
ANONYMOUS匿名用户,而9093端口用的是admin-ssl.properties中配置的认证账号(通常是高权限管理员账号)。 - 执行ACL查询命令,对比两类用户的主题访问权限:
# 查询匿名用户的ACL规则 /opt/kafka/bin/kafka-acls.sh --list --bootstrap-server kafka1:9093 --command-config /root/admin-ssl.properties --principal User:ANONYMOUS # 查询管理员账号的ACL规则(替换为你配置的实际用户名) /opt/kafka/bin/kafka-acls.sh --list --bootstrap-server kafka1:9093 --command-config /root/admin-ssl.properties --principal User:admin - 重点确认
ANONYMOUS用户是否被限制了部分主题的Describe权限,而管理员账号拥有全量主题的访问权限。
2. 检查是否包含内部主题
- 9093端口查到的主题可能包含Kafka内部主题(如
__consumer_offsets、__transaction_state、__schema_registry等),而9092端口的查询默认过滤了这类主题。 - 直接查看两个端口的完整主题列表,对比差异:
# 查看9092端口的主题列表 /opt/kafka/bin/kafka-topics.sh --list --bootstrap-server kafka1:9092 # 查看9093端口的主题列表 /opt/kafka/bin/kafka-topics.sh --list --bootstrap-server kafka1:9093 --command-config /root/admin-ssl.properties - 若9092确实看不到内部主题,可尝试添加参数强制显示验证:
/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server kafka1:9092 --exclude-internal false | wc -l
3. 核查Broker的权限控制配置
- 检查Broker是否开启了ACL授权,以及匿名访问的兜底规则:
grep -E "authorizer.class.name|allow.everyone.if.no.acl.found" /path/to/kafka/config/server.properties - 如果配置了
authorizer.class.name=kafka.security.authorizer.AclAuthorizer,且allow.everyone.if.no.acl.found=false,那么没有配置ACL的资源会拒绝匿名访问,这会导致匿名用户看不到未配置ACL的主题。
4. 对比客户端配置差异
- 检查
admin-ssl.properties是否显式关闭了内部主题过滤:cat /root/admin-ssl.properties | grep exclude.internal.topics - 若该配置为
exclude.internal.topics=false,而9092端口的默认客户端配置是exclude.internal.topics=true,就会出现主题数量差异。
5. 查看Broker日志定位具体问题
- 过滤Broker日志中9092端口的权限相关记录,直接定位拒绝访问的资源:
grep -i "denied" /var/log/kafka/server.log | grep "9092" - 日志会明确显示匿名用户访问哪些主题时被拒绝,快速锁定权限问题点。
内容的提问来源于stack exchange,提问作者DanielS
相关产品推荐
相关产品推荐

