【发布时间】:2016-11-08 21:50:04
【问题描述】:
文档https://www.safaribooksonline.com/library/view/kafka-the-definitive/9781491936153/ch04.html 说“请注意,启用自动提交后,对轮询的调用将始终提交上一次轮询返回的最后一个偏移量。它不知道实际处理了哪些事件,所以在再次调用 poll 之前(或在调用 close() 之前,它也会自动提交偏移量),始终处理 poll 返回的所有事件是至关重要的"。如果是这种情况,如果 auto.commit.interval.ms 大于处理从以前的poll() 收到的消息所需的时间,它如何工作。
为了更具体,请考虑以下场景:
enable.auto.commit=true
auto.commit.interval.ms=10
然后我循环调用poll()。
1) 在第一次调用 poll() 时,我收到 1000 条消息(偏移量 2000-3000),处理所有 1000 条消息需要 1 毫秒
2) 我再次致电poll()。在第二次poll() 调用中,它应该提交从之前的poll() 返回的最新偏移量3000,但由于auto.commit.interval.ms 设置为10 ms,它不会提交偏移量,对吧?
在这种情况下,提交的偏移量会越来越落后于实际处理的最新偏移量?
有人可以澄清/确认吗?
【问题讨论】: