kafka最早和最新的偏移值有啥区别

Posted

技术标签:

【中文标题】kafka最早和最新的偏移值有啥区别【英文标题】:What is the difference between kafka earliest and latest offset valueskafka最早和最新的偏移值有什么区别 【发布时间】:2018-06-27 11:43:55 【问题描述】:

producer 发送消息 1、2、3、4

consumer 接收消息 1、2、3、4

consumer 崩溃/断开连接

producer 发送消息 5、6、7

consumer 恢复并应该接收从 5 而不是 7 开始的消息

对于这种结果,我必须使用哪个offset 值以及需要做哪些其他更改/配置

【问题讨论】:

【参考方案1】:

当消费者加入消费者组时,它将获取最后提交的偏移量,因此如果在崩溃之前提交了最新的偏移量(即 4),它将重新开始从 5、6、7 读取。 auto.offset.reset 属性的 earliestlatest 值在消费者启动但分配的分区没有提交的偏移量时使用。在这种情况下,您可以选择是从头开始(最早)还是在最后一条消息之后(最新)重新阅读所有消息。

【讨论】:

Producer 连续发送消息...我在停止consumer之前检查了偏移值,它是8023。10分钟后我开始consumer然后第一个偏移值是8020。经过一些我又一次停止了消费者,那个时候偏移值是9239一个小时后我开始consumer然后第一个消息偏移值是9299我正在设置一个groupIdauto.offset.resetlatest我也是记录 partition 值,它只是 0 所以如果你设置为latest,它会读7。提交7之后,会读6和5吗?或者,如果有更高优先级的源源不断的新记录流,它们不会被处理? 当你提交一个偏移量时,意味着你阅读了之前的所有消息。所以提交 7 意味着接下来你不会读取 6 和 5 而是读取生产者发送的新传入消息 8。 我认为@ppatierno 没有回答这个问题。对于 Sat 的问题:auto.offset.reset 的值应该是最新的。当 auto.offset.reset 设置为 latest 时,会出现两种情况:消费者第一次订阅主题,订阅后才会收到消息到达。另一种情况是当消费者重新连接到主题时(在崩溃或其他情况下),消费者将收到消息 5、6、7,因为最近的提交是 4。 对于@Yoker 的问题:消息的顺序是不可变的。消费者将按以下顺序接收消息:5、6、7

以上是关于kafka最早和最新的偏移值有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 kafka 主题分区的最新偏移量?

Spring Kafka - 如何使用组 ID 将偏移重置为最新?

kafka重置到最新offset偏移量

如何将 Spark 消耗的最新偏移量保存到 ZK 或 Kafka 并在重启后可以读取

从最新的偏移量恢复结构化流

“与 Workspace 版本比较”和“与最新版本比较”有啥区别?