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值