英文:
How to know if max.poll.interval.ms is reached in java kafka application client?
问题
在 Kafka 达到 max.poll.interval.ms
并发生重新平衡时,是否会抛出异常?
英文:
Is there an exception thrown somewhere when kafka max.poll.interval.ms
is reached and rebalance happens?
答案1
得分: 2
当您的消费者因长时间的poll()
而被从消费者组中踢出时,您将收到一个CommitFailedException
。根据文档:
也有可能消费者会遇到“活锁”情况,即继续发送心跳,但没有取得任何进展。为了防止消费者在这种情况下无限期地保持其分区,我们提供了一个使用
max.poll.interval.ms
设置的生存检测机制。基本上,如果您不以至少与配置的最大间隔一样频繁地调用poll
,那么客户端将主动离开组,以便另一个消费者可以接管其分区。当发生这种情况时,您可能会看到一个偏移提交失败(由commitSync()
调用引发的CommitFailedException
表示)。这是一个安全机制,确保只有组的活跃成员能够提交偏移量。因此,要保持在组中,您必须继续调用poll
。
因此,您可能会捕获到CommitFailedException
。实际上,您可以继续调用poll()
,直到重新平衡完成并且您的消费者重新加入消费者组。
英文:
Once your consumer gets kicked out of the consumer group due to long poll()
, you will receive a CommitFailedException
. According to the documentation:
> It is also possible that the consumer could encounter a "livelock"
> situation where it is continuing to send heartbeats, but no progress
> is being made. To prevent the consumer from holding onto its
> partitions indefinitely in this case, we provide a liveness detection
> mechanism using the max.poll.interval.ms
setting. Basically if you
> don't call poll at least as frequently as the configured max interval,
> then the client will proactively leave the group so that another
> consumer can take over its partitions. When this happens, you may see
> an offset commit failure (as indicated by a CommitFailedException
> thrown from a call to commitSync()
). This is a safety mechanism which
> guarantees that only active members of the group are able to commit
> offsets. So to stay in the group, you must continue to call poll.
Therefore, you could possibly catch CommitFailedException
. Actually, you can keep calling poll()
until re-balancing is complete and your consumer re-enters the consumer group.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论