使用 kafka-console-consumer.sh 指定时间或偏移量消费

1、问题来源

在工作中需要观察上游生产的数据顺序和自己写的任务处理数据的顺序是否一致,尝尝需要将kafka中的指定时间或者偏移量开始的数据导出来分析,如果每次都导数据都是从头开消费导全量,往往少则几个G多则几十G的数据,导出容易卡死或者大文件传输很慢。

通过询问deepseek,推荐使用下列方案,然后就去实践是否可行

2、可选的方案

利用kafka安装包自带的./bin/kafka-console-consumer.sh来消费,省去各种找工具的烦恼

1) 根据时间来消费
bash 复制代码
# 首先重置偏移量
./bin/kafka-consumer-groups.sh --bootstrap-server <broker:port> --group export-test --topic <topic> --reset-offsets --to-datetime "2025-05-23T01:30:00.000" --execute
# 然后正常消费
./bin/kafka-console-consumer.sh --bootstrap-server <broker:port> --topic <topic> --group export-test > t.json
2) 根据偏移量来消费
bash 复制代码
./bin/kafka-console-consumer.sh --bootstrap-server <broker:port> --topic <topic> \
--partition <partition_number> --offset <offset_number> > t.json

注意:必须同时指定分区号才能使用 --offset 参数

3、最终方案

通过实践,采用根据时间来消费的方式,理由如下

  1. 指定时间点的偏移量不好获取,需要多次尝试才能确定,浪费时间

  2. 根据偏移量的方案需要指定分区号,多个分区的情况下需要重复好几遍,而且相同时间点在每个分区中中的偏移量不一致

  3. 导出的数据中不含偏移量,每次重复定位很难精确,耗时耗力

采用根据时间来消费的方式需要注意的点

  1. 执行第一步重置偏移量时指定的时间为标准UTC时区,北京时间为UTC+8(东八区),中国地区如果需要获取2025-05-23:09:30:00开始的消息,需要将--to-datetime 的时间设置为2025-05-23:01:30:00

  2. 在执行命令中指定的消费者组名称千万不能和生产中使用的消费者组一样,也就是--group 后面的名称需使用测试的名称

  3. 重置偏移量和后面的正常消费指定的的消费者组需一致

4、检查导出的消息是否准确

通过vim t.json查看导出的消息是否为预期的时间范围

相关推荐
Amy187021118236 小时前
分布式光纤传感:照亮每一个角落的“温度感知神经”
分布式
Jabes.yang7 小时前
Java求职面试:从Spring Boot到Kafka的技术探讨
java·spring boot·面试·kafka·互联网大厂
玉石观沧海9 小时前
高压变频器故障代码解析F67 F68
运维·经验分享·笔记·分布式·深度学习
小马爱打代码10 小时前
分布式锁:原理算法和使用建议
分布式·算法
一叶飘零_sweeeet12 小时前
从 “黑盒“ 到 “透明“:SkyWalking 实战指南 —— 让微服务问题无所遁形
分布式·微服务·skywalking·分布式链路追踪
ArabySide13 小时前
【ASP.NET Core】分布式场景下ASP.NET Core中JWT应用教程
分布式·后端·asp.net core
还是大剑师兰特14 小时前
Kafka 面试题及详细答案100道(91-95)-- 问题排查与解决方案1
kafka·大剑师·kafka面试题·kafka教程
小马爱打代码16 小时前
zookeeper:一致性原理和算法
分布式·zookeeper·云原生
Cikiss17 小时前
图解 bulkProcessor(调度器 + bulkAsync() + Semaphore)
java·分布式·后端·elasticsearch·搜索引擎
小马爱打代码17 小时前
zookeeper:架构原理和使用场景
分布式·zookeeper·架构