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
属性的 earliest
和 latest
值在消费者启动但分配的分区没有提交的偏移量时使用。在这种情况下,您可以选择是从头开始(最早)还是在最后一条消息之后(最新)重新阅读所有消息。
【讨论】:
Producer
连续发送消息...我在停止consumer
之前检查了偏移值,它是8023。10分钟后我开始consumer
然后第一个偏移值是8020。经过一些我又一次停止了消费者,那个时候偏移值是9239
一个小时后我开始consumer
然后第一个消息偏移值是9299
我正在设置一个groupId
和auto.offset.reset
是latest
我也是记录 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最早和最新的偏移值有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
Spring Kafka - 如何使用组 ID 将偏移重置为最新?