kafka-topics.sh --bootstrap-server kafka:9092 \
  --describe --topic order-event
kafka-configs.sh --bootstrap-server kafka:9092 --alter \
  --entity-type topics --entity-name order-event \
  --add-config min.insync.replicas=2

一台 broker 重启后 order-event 的写入全部失败,客户端日志是 NotEnoughReplicasException: The number of in-sync replicas is 1 below the required 2,生产 TPS 直接归零。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,topic 配了 min.insync.replicas=2,acks 是 all,落盘前要求至少两个副本确认。剩下那台副本还在追数据,没进 ISR,条件永远不满足。

「Kafka ISR 不足」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。

处理上按这个顺序:先看 describe 里 ISR 和 Replicas 两列的差异 确认是副本落后还是真的没了;查落后 broker 的磁盘和网络 把它追进 ISR;临时把 min.insync.replicas 降到 1 只用于止血 恢复后立刻改回;补一台副本 保证挂一台仍有两个 ISR。

改完只确认一件事:describe 的 ISR 恢复成 3 个 broker 写入不再抛 NotEnoughReplicasException。

作者 9823189