Apache Kafka在enable.auto.commit和session.timeout.ms之间发生冲突

时间:2019-02-27 09:55:15

标签: apache-kafka kafka-consumer-api

我已将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”是什么。

任何人的澄清都会对我有帮助。

1 个答案:

答案 0 :(得分:0)

自动提交不会在每个poll()调用中自动发生。一般来说,为了自动提交偏移量,必须发生两件事:

  1. auto.commit.interval的值自上次提交以来已超过。
  2. 消费者致电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,它与偏移量提交没有任何关系,但是,当然,如果此值使您失去使用方(因为它被声明为无效),则您将无法提交任何内容(只是副作用,如我所见)。