首页/数据/数据工程与 ETL 速查/kafka-get-offsets.sh 查询分区位移
Kafka64 条

kafka-get-offsets.sh 查询分区位移

查询各分区的最早/最新位移(或指定时间的位移),用于估算积压、计算消息量、确认保留范围,是容量与故障评估的常用工具。

查询分区位移能算出什么

kafka-get-offsets.sh 输出每个分区的最早或最新位移,格式是「主题:分区:位移」。常用判断有两个:用最新位移减最早位移估算分区里还留着多少数据,用两次最新位移之差估算写入速率。要注意位移是单调递增的编号,不等于消息条数——压实(compact)过的主题中间有空洞,位移差会明显大于实际消息数。

基本信息

输出格式主题:分区:位移
时间参数--time -1 最新,--time -2 最早,也可传毫秒时间戳
口径说明取的是位移数值,不是消息条数
兼容调用老版本用 kafka-run-class.sh kafka.tools.GetOffsetShell

典型使用场景

  • 估算数据量:最新位移减最早位移,评估残留消息规模
  • 评估清理效果:调整保留期后对比最早位移是否推进
  • 确认保留范围:按时间戳查位移,判断某时间点的数据是否还在
  • 记录基线:变更前后各取一次,用于复盘写入速率
  • 容量规划:统计主题总量,评估分区数与磁盘需求

查询最早与最新位移

查询最早与最新位移
# 默认查最新位移(等价 --time -1)
kafka-get-offsets.sh --bootstrap-server localhost:9092 --topic orders
# orders:0:1024
# orders:1:998

kafka-get-offsets.sh --bootstrap-server localhost:9092 --topic orders --time -1   # 最新
kafka-get-offsets.sh --bootstrap-server localhost:9092 --topic orders --time -2   # 最早

# 按时间戳定位:查某一时刻的位移,用于确认数据是否还在保留窗口内
kafka-get-offsets.sh --bootstrap-server localhost:9092 --topic orders --time 1759248000000

结果怎么用

取值含义典型用途
最新位移当前写入位置判断写入是否仍在进行
最早位移保留的最小位移确认数据是否已被清理
两者之差区间内位移跨度估算残留数据量,压实主题偏大
两次最新位移之差一段时间内的增量估算写入速率与容量趋势
老版本通过 kafka-run-class.sh kafka.tools.GetOffsetShell 调用,新版本发行包提供独立的 kafka-get-offsets.sh,写巡检脚本时要做兼容判断。
对全部分区查位移在集群上属于元数据操作,大集群上高频轮询会加重 controller 与 broker 负担,脚本要控制查询频率与范围。

易错点

  • 把位移差当作消息条数,压实主题存在空洞,会明显高估数据量
  • 对全部主题全部分区高频轮询位移,加重集群元数据负担,巡检应限定范围与频率
  • 估算残留数据量时不做字节换算,磁盘需求评估偏差很大
  • 混淆时间参数语义(-1 最新、-2 最早),把最早位移当作最新使用,结论完全反向

数据来源与参考

  • Apache Kafka 官方文档:GetOffsetShell 工具说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌