说明
代码不需要显示操作
这种提交方式有两个很重要的参数:
# 是否开启自动提交,true or false
enable.auto.commit=true
# 提交偏移量的时间间隔,默认5000ms
auto.commit.interval.ms=5000
每隔 5 秒,消费者会自动把从 poll()方法接收到的最大偏移量提交上去。
缺点:会发生 重复消费 和 丢失消息 的情况。
缺点:重复消费
容易出现 提交的偏移量 小于 客户端处理的最后一个消息的偏移量 。
缺点:丢失数据
描述:
- 2号消息拉取后,正好赶上第5秒,自动提交offset
- 在没处理完2号消息时,程序崩溃,或服务器断电
- 恢复程序运行后,拉取的是 3号消息,但是 2号消息还没处理完,造成丢失数据
解决
改成手动提交,处理消息完成后,再提交位移。
好处:即使处理消息的过程中发生了异常,由于没有提交位移,下次消费时还会从上次的位移处重新拉取消息,不会发生消息丢失的情况。

