我已将enable.auto.commit设置为true,将自动提交间隔设置为1000ms,并将session.timeout.ms设置为30000。
问题:-如果我将自动提交间隔设置为1秒,则意味着我的偏移量每隔一秒钟就会提交一次,但是session.timeout.ms设置为30秒,而下一次轮询则需要更多时间如果时间超过30秒,则意味着用户无法通过表发送其在该组中的存在信息,并且该用户将从该组中删除。经过30秒以上的时间后,出现错误提示:
“对于组addIdentity的自动偏移量提交失败:提交不能为 由于该组已经重新平衡并分配了 分区到另一个成员。这意味着 后续对poll()的调用的时间比配置的时间长 session.timeout.ms,通常意味着轮询循环为 花太多时间处理邮件。您可以解决这个问题 通过增加会话超时或减小最大大小 在poll()中返回的批次具有max.poll.records。”
如果在每次轮询中都发生了自动提交,那么“ auto.commit.interval.ms”是什么。
任何人的澄清都会对我有帮助。
答案 0 :(得分:0)
自动提交不会在每个poll()
调用中自动发生。一般来说,为了自动提交偏移量,必须发生两件事:
auto.commit.interval
的值自上次提交以来已超过。poll()
(假设auto.commit.enable=true
)
所以,您的短语:
如果在每次轮询中都发生了自动提交,那么“ auto.commit.interval.ms”是什么。
事实是,如果两次poll()
呼叫之间的时间超过您的 1秒 auto.commit.interval
,您将在每次轮询呼叫中提交偏移。如果每100毫秒poll()
,则只会在第10次连续调用中提交偏移量。
例如,如果将auto.commit.interval
设置为 60000ms (1分钟),并且poll()
调用每30秒发生一次,则您将在第二秒开始提交偏移量poll()
打电话(嗯,至少在时间合适的情况下..但您明白了。)
关于session.timeout.ms
,它与偏移量提交没有任何关系,但是,当然,如果此值使您失去使用方(因为它被声明为无效),则您将无法提交任何内容(只是副作用,如我所见)。