Loading

Kafka Consumer指定时间戳位置消费消息

Kafka Consumer指定时间戳位置消费消息

若用户不想从最旧的(earliest)最新的(lastest)offset位置开始消费,想指定某个时间戳位置开始消费,是否可行呢? 答案:可行的

用户给定时间戳,kafka server通过时间戳确定并返回距离时间戳最近的一条消息的offset,从返回的offset开始消费消息即从用户指定某个时间戳开始消费消息

一、生产者生产消息用于测试

Topic:data-time,通过图1和图2的offset,共产生2850条消息


图1


图2

二、消费者消费消息验证测试


图3


图3对比图2可知,消费者最后一条消息:2022-09-24 10:53:45...131, offset=2849。消费者消费生产者发布的2850条消息(即全部发布消息)

利用offset explorer也可以佐证:

三、Kafka Client通过时间戳获取offset(单节点-单分区)

实验目的:想从offset=36开始消费消息,需要给定的时间戳:2022-10-24 09:33:42.016注意:此处的时间参考是格林威治时间,使用时要转为东八区北京时间,即减8h

进入kafka\bin\windows目录下,打开cmd.exe
输入命令:kafka-consumer-groups.bat --reset-offsets --to-datetime 2022-10-24T01:33:42.016 --group console-consumer-1 --bootstrap-server localhost:9092 --execute --topic data-time

由上图结果可知:offset更新到36,验证结果跟实验目的一致,验证可行性。

四、Kafka Client通过时间戳获取offset(单节点-多分区)

通过 kafka-consumer-groups.bat 获取所有分区指定时间戳最近的offset

  • 指定格林威治时间:2022-11-25 16:20:00.000 即北京时间:2022-11-25 08:20:00.000

  • 指定消费者组:ExampleConsumer-1

  • 指定Topic:data-time(即针对所有partition:0,1,2,3,4,5,6)

  • 在Offset Explorer 中通过时间戳查找offset. 0,1,2,3,4,5,6分区 对应offset: 67,66,67,66,67,72,67

执行命令:kafka-consumer-groups.sh --reset-offsets --to-datetime 2022-11-25T08:20:00.000 --group ExampleConsumer-1 --bootstrap-server 10.8.198.66:9092 --execute --topic data-time

Offset Explorer的结果:

未重置前的offset值

重置后的offset值

posted @ 2022-10-24 15:52  eiSouthBoy  阅读(5027)  评论(0)    收藏  举报