没建 topic 就直接发消息,自动建出来的 topic 副本数是 1,一台 broker 重启数据就不可用了。日志里能对上时间点,这种反而好排。
broker 上 num.partitions 与 default.replication.factor 默认都是 1,自动建 topic 也照这套值来。这一点先确认清楚,后面就不用反复试。
# server.properties auto.create.topics.enable=false num.partitions=6 default.replication.factor=3
「Kafka 自动创建 topic」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
处理上按这个顺序:生产集群先把自动创建 topic 的开关关掉 避免误建;把默认分区数和副本数改成规划里定好的数值;统一用脚本建 topic 并检查副本落在不同节点。
结果对不对很好判断,新 topic 全部由脚本创建,describe 显示的副本数与规划一致。
