kafka的 groupid 与 auto.offset.reset
通常我们消费kafka数据的时候都会设置两个参数:
1 |
|
- kafka-0.10.1.X版本之前: auto.offset.reset 的值为 smallest 和 largest.(offest保存在zk中)
- kafka-0.10.1.X版本之后: auto.offset.reset 的值更改为:earliest, latest 和 none (offest保存在kafka的一个特殊的topic名为:__consumer_offsets里面)
参数解读:
auto.offset.reset: 可理解为kafka consumer读取数据的策略,本地用的kafka版本为0.10,因此该参数可填earliest | latest | none。
- earliest: 当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费
- latest: 当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据
- none: topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常
应用:
场景一:
Kafka上在实时被灌入数据,但kafka上已经积累了两天的数据,如何从最新的offset开始消费?(最新指相对于当前系统时间最新)
1.将group.id换成新的名字(相当于加入新的消费组)
2.网上文章写还要设置 properties.setProperty(“auto.offset.reset”, “latest”)
实验发现即使不设置这个,只要group.id是全新的,就会从最新的的offset开始消费
场景二:
kafka在实时在灌入数据,kafka上已经积累了两天的数据,如何从两天前最开始的位置消费?
1.将group.id换成新的名字
2.properties.setProperty(“auto.offset.reset”, “earliest”)
场景三:
不更改group.id,只是添加了properties.setProperty(“auto.offset.reset”, “earliest”),consumer会从两天前最开始的位置消费吗?
不会,只要不更改消费组,只会从上次消费结束的地方继续消费
场景四:
不更改group.id,只是添加了properties.setProperty(“auto.offset.reset”, “latest”),consumer会从距离现在最近的位置消费吗?
不会,只要不更改消费组,只会从上次消费结束的地方继续消费
总结
auto.offset.rese参数一般只作用于新增加消费者组时。
kafka的 groupid 与 auto.offset.reset
http://example.com/2023/08/11/kafka的 groupid 与 auto.offset.reset/