组件版本OSUbuntu 22.04Docker24.xKafkabitnami/kafka:3.1ZooKeeperbitnami/zookeeper:latest部署方式docker-compose3 brokerkafka0/1/2 1 zookeeper告警现象收到磁盘使用率告警持续超过 85%触发值88.6%。登机排查df -h /Filesystem Size Used Avail Use% Mounted on /dev/vda3 492G 416G 57G 89% /492G 的数据盘用掉了 416G。定位大文件du -x --max-depth3 / 2/dev/null | sort -rn | head -10435209908 / 389902464 /data 383231436 /data/pika 297562320 /data/pika/log 39105660 /var/lib 34201472 /var/lib/docker 33078652 /var/lib/docker/data/pika/log占 297G但那是业务历史日志另一个异常点是/var/lib/docker占了 33G——对一个没有大数据量业务的容器目录来说不正常。继续查大文件find / -xdev -size 500M -printf %s %p\n 2/dev/null | sort -rn | head -1013608618309 /var/lib/docker/containers/4c7e0a9cc36c.../4c7e0a9c...-json.log 13608511637 /var/lib/docker/containers/0d31fb8d4322.../0d31fb8d...-json.log 1887436880 /data/pika/log/pika.INFO.20250103-075343 ...两个 Docker 容器日志各13.6 GB合计 27 GB立刻引起注意。找到是哪个容器docker ps --format table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}CONTAINER ID NAMES IMAGE STATUS 1c1d656988 kafka0 bitnami/kafka:3.1 Up 17 months 4c7e0a9cc36c kafka1 bitnami/kafka:3.1 Restarting (1) 41 seconds ago 0d31fb8d4322 kafka2 bitnami/kafka:3.1 Restarting (1) 41 seconds ago 23a393a15e4a zookeeper bitnami/zookeeper:... Up 17 monthskafka1 和 kafka2 正在反复重启而 kafka0 正常运行了 17 个月。查重启次数docker inspect --format Name{{.Name}} RestartCount{{.RestartCount}} ExitCode{{.State.ExitCode}} kafka1 kafka2Name/kafka1 RestartCount712689 ExitCode1 Name/kafka2 RestartCount712689 ExitCode1712,689 次。每次启动刷几十行日志两年积累下来正好是 13.6 GB。根因InconsistentClusterIdExceptiondocker logs --tail 20 kafka1 21[2026-06-01 02:41:40,083] INFO Cluster ID kqjY-URYRa2IGe0oJZcHyw [2026-06-01 02:41:40,094] ERROR Fatal error during KafkaServer startup. Prepare to shutdown kafka.common.InconsistentClusterIdException: The Cluster ID kqjY-URYRa2IGe0oJZcHyw doesnt match stored clusterId Some(Lj1BvdqOSp-EXuAo5LICDQ) in meta.properties. The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wrong. at kafka.server.KafkaServer.startup(KafkaServer.scala:228)kafka2 报完全相同的错。原因Kafka broker 启动时从 ZooKeeper 读取集群 ID再与本地meta.properties里存的 ID 比对。两者不匹配则拒绝启动。时间线还原查容器创建时间docker inspect --format Name{{.Name}} Created{{.Created}} kafka0 kafka1 kafka2 zookeeperName/kafka0 Created2024-02-27T11:50:10Z Name/kafka1 Created2024-02-23T08:37:29Z Name/kafka2 Created2024-02-23T08:37:29Z Name/zookeeper Created2024-02-27T11:48:28Z事件序列已经清晰2024-02-23kafka1、kafka2 初次部署三节点集群正常运行集群 ID 写入各 broker 本地meta.properties旧 IDLj1BvdqOSp-EXuAo5LICDQ。2024-02-27某次操作重建了 ZooKeeper 容器。ZooKeeper无 volume 挂载重建后数据全部丢失ZK 重新初始化生成新集群 IDkqjY-URYRa2IGe0oJZcHyw。同时 kafka0 也被重建以新 ID 注册成功。kafka1/kafka2 未重建本地meta.properties还是旧 ID——从此每次启动都报InconsistentClusterIdExceptionrestart: always让它们无限重试。2026-06-01两年积累的日志打满磁盘触发告警。影响评估kafka0port 9092一直正常业务流量由它单独承担功能上未中断。集群无副本kafka0 一旦故障消息队列完全不可用。docker-compose.yml 里 kafka-manager 已把 kafka1/kafka2 注释掉#- kafka1说明当时有人发现问题但未彻底修复。修复步骤第一步截断日志立即止血容器运行中可直接截断 json.log不影响容器本身 /var/lib/docker/containers/4c7e0a9cc36c7f18.../4c7e0a9c...-json.log /var/lib/docker/containers/0d31fb8d4322ad87.../0d31fb8d...-json.log df -h /Filesystem Size Used Avail Use% Mounted on /dev/vda3 492G 126G 347G 27% /磁盘从 89% 降至 27%告警消除。第二步重建 kafka1/kafka2两个容器均无 volume 挂载容器内没有需要保留的数据直接删除重建docker stop kafka1 kafka2 docker rm kafka1 kafka2 cd /data/docker/kafka docker-compose up -d kafka1 kafka2观察启动日志不应再出现InconsistentClusterIdExceptiondocker logs -f kafka1kafka 02:41:37.97 INFO ** Starting Kafka ** [INFO] starting (kafka.server.KafkaServer) [INFO] [KafkaServer id1] started第三步验证集群恢复# 确认 3 个 broker 都已注册 docker exec kafka0 /opt/bitnami/kafka/bin/kafka-broker-api-versions.sh \ --bootstrap-server 192.168.1.1:9092 2/dev/null | grep id:id: 0 ... id: 1 ... id: 2 ...第四步配置 Docker 日志限制防复发cat /etc/docker/daemon.json EOF { log-driver: json-file, log-opts: { max-size: 500m, max-file: 3 } } EOF # reload 不重启容器新限制对此后新建容器生效 systemctl reload docker为什么重建可以修复Kafka broker 第一次启动时若本地无meta.properties会向 ZooKeeper 查询当前集群 ID 并写入本地文件。重建容器后meta.properties不存在broker 用现有 ZooKeeper 的 ID 重新注册集群 ID 一致启动成功。快速参考定位大日志# 找超过 500M 的文件 find / -xdev -size 500M -printf %s %p\n 2/dev/null | sort -rn | head -20 # 查 Docker 容器磁盘占用 docker system df截断容器日志不删文件不重启容器 /var/lib/docker/containers/容器ID/容器ID-json.log查 Kafka broker 重启次数和退出码docker inspect --format Name{{.Name}} RestartCount{{.RestartCount}} ExitCode{{.State.ExitCode}} 容器名重建无 volume 的 Kafka 容器docker stop kafka1 kafka2 docker rm kafka1 kafka2 cd /path/to/docker-compose docker-compose up -d kafka1 kafka2易错点ZooKeeper 容器无 volume重建 ZK 会丢失集群 ID必须同步重建所有 broker。meta.properties在容器可写层有 volume 挂载时需手动删除该文件再重启无 volume 时直接重建容器更干净。restart: always 无限崩溃 日志无上限增长必须配合max-size限制。