首页/数据/数据工程与 ETL 速查/kafka-topics.sh 列出主题
Kafka64 条

kafka-topics.sh 列出主题

列出主题时过滤内部主题,便于巡检与环境比对;自动化里可结合 --exclude-internal 避免 __consumer_offsets 等系统主题干扰。

列出主题有什么用

kafka-topics.sh --list 返回集群中的主题清单,是环境盘点与巡检的基础动作:上线前核对新主题是否已创建、迁移后核对主题是否齐全、日常巡检比对是否存在意外的主题增删。默认输出会包含 __consumer_offsets 这类内部主题,脚本判断前应先排除。

怎么用才靠谱

把输出排序后与一份基线清单做差集,是发现异常最有效的方式:多出来的主题可能是有人手工建的测试主题,缺失的主题则会让依赖它的任务直接失败。自动化脚本同时要注意,大规模集群上拉取全量元数据本身有开销,巡检频率不宜过高。

基本信息

用途列出集群中的全部主题
常用参数--list、--exclude-internal
输出处理排序后与基线清单做 diff
自动化建议结合前缀过滤,只关注自己负责的业务域
性能提示主题数上千时拉取全量元数据有开销,控制巡检频率

参数与输出读法

项目含义注意
--list输出全部主题名,每行一个包含内部主题,脚本判定前先排除
--exclude-internal排除内部主题巡检与对比场景建议始终加上
输出顺序不做保证比对前先排序,否则 diff 全是噪音
grep 前缀过滤只看某业务域的主题命名规范统一时非常好用

典型使用场景

  • 上线核对:确认新增主题已创建,避免生产端写入失败
  • 迁移前后对比:确认主题集合没有遗漏或多出
  • 配置巡检:列出某业务域的主题,再逐个检查保留与副本配置
  • 清理未使用主题:结合消费组与生产端信息,识别长期无流量的主题
  • 权限与命名审计:发现不符合命名规范或不该存在的主题

列出主题

列出主题
# 列出全部主题(包含内部主题)
kafka-topics.sh --bootstrap-server localhost:9092 --list

# 排除内部主题,输出更干净
kafka-topics.sh --bootstrap-server localhost:9092 --list --exclude-internal

# 只列某个业务域的主题
kafka-topics.sh --bootstrap-server localhost:9092 --list --exclude-internal | grep '^prod\.order'

# 与基线清单对比,输出差异(排序后 diff,避免顺序噪音)
kafka-topics.sh --bootstrap-server localhost:9092 --list --exclude-internal | sort > /tmp/now.txt
diff /tmp/baseline.txt /tmp/now.txt
输出顺序不做保证:同一集群多次执行可能得到不同顺序,做比对前务必先排序,否则 diff 结果里全是顺序差异,看不出真正的问题。
默认输出包含 __consumer_offsets 等内部主题:脚本把它们当成新主题上报,会造成持续的误报,排除内部主题应作为巡检脚本的默认设置。

易错点

  • 脚本未排除内部主题,把 __consumer_offsets 当作新增主题反复误报
  • 跨环境对比时不考虑命名前缀差异(prod 与 stg),直接 diff 得到全量差异
  • 大规模集群高频拉取主题列表,元数据请求本身造成 broker 额外负载
  • 只看主题是否存在,不校验分区数与副本数,环境之间的配置差异被漏掉

数据来源与参考

  • Apache Kafka 官方文档:kafka-topics.sh 参数说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌