磁盘空间不足导致 Kafka Broker 停止服务时,最稳妥的应急方式是先尝试动态调整保留策略触发自动清理,若无效再谨慎手动清理旧日志段文件,严禁直接删除正在写入的活跃段。
先说结论:优先通过调整保留策略自动清理,若紧急则手动删除旧段文件,严禁删除活跃段。
- 先确认磁盘占用及 log.dirs 路径
- 优先修改 topic 的 retention.ms 配置触发自动清理
- 手动删除前务必备份数据并检查消费者 offset
- 清理后验证 Broker 状态及消费延迟
1. 定位日志目录与磁盘占用
首先确认磁盘使用率及 Kafka 日志存储路径,避免误删其他系统文件。
检查磁盘空间:
df -h
du -sh * | sort -hr查找 Kafka 日志路径:
进入 Kafka 安装目录,查看配置文件中的 log.dirs 配置项:
grep "log.dirs" config/server.properties若无法查看配置文件,可通过进程启动参数查找:
ps -ef | grep kafka | grep log.dirs2. 优先方案:动态调整保留策略
若 Broker 尚未完全崩溃或能通过 JMX 连接,优先使用命令行动态调整 Topic 保留时间,触发 Log Cleaner 工作,避免手动删除风险。
命令示例:
bin/kafka-configs.sh `--bootstrap-server` localhost:9092 `--entity-type` topics `--entity-name` <topic-name> `--alter` `--add-config` retention.ms=3600000将保留时间临时调整为 1 小时(3600000 毫秒),等待几分钟让 Kafka 自动清理旧段。清理完成后建议恢复原配置。
3. 应急方案:手动清理日志段(高风险)
若 Broker 已停止且无法启动,需手动清理。此操作存在数据一致性风险,务必遵循以下安全检查清单。
安全检查清单:
- 备份数据:删除前必须备份日志目录,防止误删导致数据永久丢失。
- 确认非活跃段:仅删除时间戳最早、偏移量最小的 .log 和 .index 文件。
- 检查消费者 Offset:确保删除的文件偏移量小于消费者已提交的 Offset,避免消费者报错 OffsetOutOfRange。
- 严禁删除活跃段:不要删除文件名偏移量最大的段,那是当前正在写入的活跃段。
操作步骤:
1. 备份日志目录:
cp -r /path/to/kafka-logs /path/to/backup/kafka-logs-backup-$(date +%F)2. 删除旧段文件:
若 Broker 已停止,仅在确认消费者 offset 已提交且不影响业务的前提下,谨慎删除最早的非活跃段文件,并建议先备份。进入 log.dirs 配置的目录,查找时间戳较早的 .log 和 .index 文件。
rm -f 00000000000000000000.log
rm -f 00000000000000000000.index3. 清理索引:若手动删除了 .log 文件,必须删除对应的 .index 和 .timeindex 文件,否则 Broker 启动时会因索引不匹配报错。Kafka 启动后会自动重建索引。
4. 重启与验证
清理完成后重启 Broker,并验证服务状态及数据一致性。
重启服务:
bin/kafka-server-start.sh config/server.properties验证步骤:
- 进程检查:使用 jps 确认 Kafka 进程存在。
- 日志检查:查看 logs/server.log 无 ERROR 报错,特别是无"Log directory is full"或"Index mismatch"错误。
- 消费延迟检查:使用 bin/kafka-consumer-groups.sh `--bootstrap-server` <host> `--describe` `--group` <group-id> 检查消费延迟,观察 lag 是否开始下降。
5. 常见坑与风险规避
- Offset 不连续:手动删除 .log 文件可能导致 Offset 不连续,引发消费者错误。若消费者报错,需重置消费者 Offset 到最新位置。
- 索引不一致:手动删除后若启动失败,可能需要删除对应的 .index 文件让 Kafka 重建。不要只删 .log 不删 .index。
- 权限问题:确保 Kafka 运行用户对日志目录有读写权限,避免重启后因权限问题无法写入。
- 扩容建议:应急处理后,建议尽快扩容磁盘或增加 Broker 节点,调整 log.retention.bytes 限制,防止再次发生。
参考来源
Apache Kafka Documentation - Operations
URL: https://kafka.apache.org/documentation.html
原文链接:https://www.zjcp.cc/ask/11626.html
