目录
2.3 同步和异步组合提交commitAsync()和 commitsync()
注:基本代码和信息来自享学课堂,自学略有修改
1 基本概念
- 提交:消费者消费完消息之后,更新自己消费那个消息的操作
- _consumer_offset:消费者消费完消息之后,会往_consumer_offset主题发送消息,_consumer_offset保存每个分区的偏移量
- 分区再均衡:消费者的数量发生变化,或者主题分区数量发生变化,会修改消费者对应的分区关系,叫做分区再均衡:保证kafka高可用和伸缩性;缺点:在均衡期间,消费者无法读取消息,群组短时间不可用
2 提交方式
2.0 重复消费和丢失消费图解
重复消费图解:
丢失消费图解:
2.1 自动提交
自动提交是最贱的提交偏移量方式,
消费者会自动把从
poll()
方法接收到的
最大
偏移量提交上去。
参数:
- enable.auto.comnit=true:在消费者close()的时候也会自动提交
- auto.commit.interval.ms=默认5s,没过5秒就会提交偏移量,但是在4秒发生了分区在均衡,偏移量还没来得及提交,他们这四秒的消息就会被重复消费
问题:
自动提交虽然方便
,
但是很明显是一种基于时间提交的方式
,
不过并没有为我们留有余地来避免重复处理消息。
2.2 手动提交(同步提交)commitsync
参数:
auto.commit. offset = false:使用commitsync()提交poll()返回最新偏移量
注意:
- 处理完业务之后,一定要手动调用commitsync()
- 如果发生了在均衡,由于当前commitsync偏移量还未提交,所以消息会被重复消费
- commitsync会阻塞直到提交成功
代码示例: