首页/数据/数据工程与 ETL 速查/kafka-log-dirs.sh 磁盘占用分析
Kafka64 条

kafka-log-dirs.sh 磁盘占用分析

按 Broker 与日志目录查看分区大小与位移,定位磁盘不均衡、单分区过大、迁移目标容量,是磁盘类事故排查的原始数据。

按目录查看磁盘占用

kafka-log-dirs.sh --describe 按「broker → 日志目录 → 分区」的层级输出每个分区占用的字节数和 offsetLag,是磁盘类问题的第一手数据:哪块盘快满、哪个分区异常偏大、迁移目标还有多少余量,都能从这里看出来。输出是 JSON,适合配合 jq 或脚本做聚合与排序。

基本信息

输出层级broker → logDir → 分区大小与 offsetLag
过滤参数--topic-list 限定主题,--broker-list 限定节点
主要用途找大主题大分区、确认迁移目标余量
配套观察操作系统侧 du/df 一起看,Kafka 只统计日志段

典型使用场景

  • 磁盘告警时定位:先确认是哪块盘、哪个主题在增长
  • 负载均衡:多盘部署下检查分区是否集中在单块盘
  • 迁移前评估:确认目标 broker 剩余空间是否够接收分区
  • 大分区排查:找出异常偏大的分区,评估拆分或独立主题
  • 扩容决策:按主题总量趋势判断何时需要加盘加节点

查看目录占用与排序

查看目录占用与排序
# 查看全部日志目录(输出为 JSON,可直接喂给脚本)
kafka-log-dirs.sh --bootstrap-server localhost:9092 --describe | head

# 只看某个主题与某个 broker,缩小输出范围
kafka-log-dirs.sh --bootstrap-server localhost:9092 --describe \
  --topic-list orders --broker-list 1

# 按大小排序找出最大的 5 个分区(需要 jq)
kafka-log-dirs.sh --bootstrap-server localhost:9092 --describe \
  | jq -r '.brokers[].logDirs[].partitions[] | [.partition, .size] | @tsv' \
  | sort -k2 -n | tail -5

输出字段读法

字段含义异常表现
brokerbroker 编号某节点分区总量明显偏多即为不均衡
logDir日志目录路径多盘部署时需要逐个目录核对
partition分区名,如 orders-0个别分区特别大说明 key 分布倾斜
size该分区占用字节数增长过快需评估保留策略
offsetLag该副本落后的位移非 0 说明副本没跟上,可与 ISR 指标互相印证
配合操作系统层面的 du/df 一起看:Kafka 统计的是日志段大小,磁盘上还包含索引文件、其他数据目录与系统占用,两者数值不一致是正常的。
多日志目录配置下分区落到哪块盘由分配策略决定,可能集中在某一块;只监控整机磁盘使用率会漏掉单盘打满、broker 拒绝写入的情况。

易错点

  • 多盘部署时只看整机使用率,漏掉单盘打满导致该 broker 写入失败
  • offsetLag 长期非 0 却不处理,副本已经落后,故障切换时会带来更大的复制开销
  • 把 Kafka 统计的分区大小直接等同于磁盘占用,忽略索引与系统文件,容量评估偏乐观
  • 迁移大分区时不加限流,抢占带宽影响正常读写,业务延迟跟着上升

数据来源与参考

  • Apache Kafka 官方文档:kafka-log-dirs.sh
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌