auto.commit.interval.ms

kafka自动提交offset的频率,默认是5000ms,就是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机制

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐