Kafka 0.11消费者组偏移量重置:不同选项计算逻辑咨询
解答
一、--by-duration <时长> 的偏移量计算逻辑
这个选项的核心是以执行命令的当前系统时间为基准,向前偏移指定时长,找到对应时间点之后的第一条消息的偏移量:
- 首先获取执行命令时的系统时间(你的例子中是
Thu May 31 15:30:45 BST 2018) - 减去指定的时长
PT1H30M0S(ISO 8601格式,代表1小时30分钟),得到目标时间点:2018-05-31 14:00:45 BST - 遍历目标主题的每个分区,找到时间戳大于等于该目标时间点的第一条消息,将偏移量重置到这个消息的位置
二、--to-datetime <时间戳> 的偏移量计算逻辑
这个选项是直接使用你指定的精确时间点作为基准,找到对应时间点之后的第一条消息的偏移量:
- 完全依赖你传入的时间参数(例子中是
2018-05-31T14:00:00.000),不参考命令执行的当前时间 - 同样遍历每个分区,找到时间戳大于等于该指定时间点的第一条消息,将偏移量重置到这个位置
三、为什么你的结果不一致?
从你的命令输出和时间戳可以明显看到差异原因:
--by-duration计算出的目标时间是14:00:45,而--to-datetime指定的是14:00:00,两者相差45秒- 在这45秒内,
Test_Upgrade主题的两个分区都产生了大量新消息:- 分区0:偏移量从625跳到772,新增了147条消息
- 分区1:偏移量从615跳到754,新增了139条消息
- 两个选项定位的时间点不同,自然会找到不同的消息偏移量
四、Kafka 0.11版本的额外注意事项
Kafka 0.11开始支持消息级别的时间戳(之前版本只有日志段时间戳),这两个偏移量重置选项都是基于消息的时间戳来计算的:
- 如果主题配置
log.message.timestamp.type=CreateTime(默认值),则使用生产者发送消息时的时间戳 - 如果配置为
LogAppendTime,则使用Broker写入消息时的时间戳
不同的配置会影响最终偏移量的计算结果,需要根据你的业务场景确认配置。
内容的提问来源于stack exchange,提问作者Rajesh Reddy B
相关产品推荐
相关产品推荐

