凌晨磁盘告警到 100%,生产端全部报 KafkaStorageException: Error while appending to file,三个分区不可写,消费 lag 一分钟涨十万。乍看像缓存或者权限的锅,追下去往往不是。

du -sh /data/kafka-logs/* | sort -h | tail -10
kafka-configs.sh --bootstrap-server kafka:9092 --alter \
  --entity-type topics --entity-name app-log \
  --add-config retention.bytes=53687091200

追下去是这么回事:日志段和 index 文件把数据盘写满,broker 无法再追加新段。retention 按时间删,但流量翻倍后单日增量已经超过磁盘容量。

「Kafka 磁盘写满」这类改动最怕改一半,回滚脚本先准备好,再动生产。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,先看 data 目录下哪个 topic 的分区占得最多;临时把该 topic 的 retention.bytes 设上限 让旧段尽快滚掉;确认副本同步不受影响 再逐个 broker 处理;长期按日增量重算磁盘容量或加盘。

验收就看一点,磁盘使用率降到 80% 以下 broker 日志不再出现 KafkaStorageException 写入恢复。

作者 9823189