auto.commit.interval.ms
kafka
自动提交offset
的频率,默认是5000
ms,就是5s
如果将enable.auto.commit
设置为true,则消费者偏移量自动提交给Kafka的频率(以毫秒为单位)。
The frequency in milliseconds that the consumer offsets are
auto-committed to Kafka if enable.auto.commit is set to true.
自动提交是调用poll方法
的时候顺便提交的,如果没有调用poll,时间到了也不会提交.
假设 enable.auto.commit 设置为 true,auto.commit.interval.ms 设置为 3000,试想一下会不会出现这样的问题:
poll 方法返回了 500 条数据,需要 5 秒钟才能处理完,假设在第 4 秒的时候应用挂了,offset 是不是在第 3
秒的时候已经被自动提交了,从而导致第 4 秒之后的数据“丢失”了?
正确答案是:不会的!虽然 auto.commit.interval.ms 设置为 3000,但是检查时间间隔是否过了 3 秒是由 poll 方法去触发的,所以只要在记录还没处理完之前我们没有主动去调用 poll 方法,就算时间间隔到了,也不会去自动提交。
如果auto_commit_interval_ms
的值设置的过大,当消费者在自动提交偏移量之前异常退出,将导致kafka未提交偏移量,进而出现重复消费的问题,所以建议auto_commit_interval_ms
的值越小越好
enable.auto.commit
如果为true,则将在后台定期提交消费者的offset。
默认值为true
;
总结
- offset自动提交,要注意可能引起重复消费的问题
参考
Kafka 中文文档 - ApacheCN
容易被误会的 kafka auto commit - Rason’s Blog:
Kafka提交offset机制_小白-CSDN博客_kafka offset机制