KafkaConsumerauto.offset.reset理解-创新互联

先来一下 kafka 官网对于 auto.offset.reset 的解释:
在这里插入图片描述
上面的描述挺准确的,但如果没有相关背景会感觉很懵逼。网上也有很多文章讲这个东西并给了很多例子,看了之后总感觉没有理解清楚。

创新互联建站是一家集网站建设,余姚企业网站建设,余姚品牌网站建设,网站定制,余姚网站建设报价,网络营销,网络优化,余姚网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

先来看一下怎么查看消费者 group 的 offset 情况:
每个 consumer group 会为每个消费的 partition 保存 offsets,这些 offsets 被保存在 kafka 的内部 topic:__consumer_offsets。
假设有一个 group:demo-consumer-group 和一个 topic:demo-topic,并且只有一个分区,先向其中发送两条消息。

运行 kafka 的管理脚本:

bin/kafka-consumer-groups.sh --describe --bootstrap-server 127.0.0.1:9092 --group demo-consumer-group

在这里插入图片描述
重点:下面的描述都是针对一个消费者 group 的,不同消费者 group 的 CURRENT-OFFSET、LOG-END-OFFSET、LAG 将会重新计算。

这个 partition 有两条消息,所以 LOG-END-OFFSET 是 2。
当有消费者 A 来消费这个分区的时候,auto.offset.reset 被设置成 latest,因为还没有正确设置 offset,这个消费者不会消费之前的消息,从 CURRENT-OFFSET 可以看出来。LAG 表示当前消费者还剩多少消息没有消费。

这里有个数据丢失的场景, 当这个消费者 A 收到第三条消息的时候,如果处理失败没有提交 offset,LOG-END-OFFSET 变成了 3,但是 CURRENT-OFFSET 还是未设置。这个时候发生重平衡,消费者 B 被分配到来消费这个分区的消息,消费者 B 也是消费不到第三个消息的。

当消费者正常消费消息后,CURRENT-OFFSET 将会被设置,即使消费者停了也是有这个记录的。当有新的消费者重新启动开始消费的时候,如果 CURRENT-OFFSET 有值,auto.offset.reset 设置成什么已经不重要了,都将会从 CURRENT-OFFSET 的下一个 offset 进行消费。

所以 auto.offset.reset 这个配置的设置是跟 CURRENT-OFFSET 是有关系的,如果 CURRENT-OFFSET 没有设置值,那 earliest 就从这个 partition 从头到尾开始消费,latest 不会消费消息,如果 CURRENT-OFFSET 有值,就是 CURRENT-OFFSET 指向的下一个 offset 开始消费。

有了这个知识点,应该可以看懂这篇博客了:
Kafka auto.offset.reset值详解

所以当新开一个 消费者组的时候如果使用了 earliest 的话,会消费那个 partition 之前的所有消息,那就需要考虑数据的容量和消费资源是否足够的影响了。

参考:
Kafka Consumer Auto Offset Reset

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻名称:KafkaConsumerauto.offset.reset理解-创新互联
新闻来源:http://scyanting.com/article/dcjpdi.html