如何知道java kafka应用程序客户端是否达到max.poll.interval.ms?

如何知道java kafka应用程序客户端是否达到max.poll.interval.ms?,java,apache-kafka,kafka-consumer-api,Java,Apache Kafka,Kafka Consumer Api,当到达kafkamax.poll.interval.ms并发生重新平衡时,是否在某个地方引发异常 一旦您的消费者因长时间poll()被逐出消费者组,您将收到CommitFailedException。根据报告: 消费者也可能遇到“活锁” 它继续发送心跳,但没有进展的情况 正在制作。以防止消费者抓住其 在这种情况下,我们提供了活动性检测 使用max.poll.interval.ms设置的机制。基本上如果你 至少不要像配置的最大间隔那样频繁地调用poll, 然后,客户将主动离开该组,以便另一个 使用

当到达kafka
max.poll.interval.ms并发生重新平衡时,是否在某个地方引发异常

一旦您的消费者因长时间
poll()
被逐出消费者组,您将收到
CommitFailedException
。根据报告:

消费者也可能遇到“活锁” 它继续发送心跳,但没有进展的情况 正在制作。以防止消费者抓住其 在这种情况下,我们提供了活动性检测 使用
max.poll.interval.ms
设置的机制。基本上如果你 至少不要像配置的最大间隔那样频繁地调用poll, 然后,客户将主动离开该组,以便另一个 使用者可以接管其分区。当这种情况发生时,您可能会看到 偏移提交失败(如
CommitFailedException
调用
commitSync()
)时抛出。这是一种安全机制 保证只有组的活动成员才能提交 补偿。因此,要留在群中,您必须继续呼叫poll



因此,您可能会捕获到
CommitFailedException
。实际上,您可以继续调用
poll()
,直到重新平衡完成,您的消费者重新进入消费者组。

您可能会在更早的时候在心跳线程中遇到异常,类似于“心跳线程因意外错误而失败:…”@mazaneicha我想这取决于配置。我认为,不管如果某个消费者被赶出该组,但继续发送心跳,则该消费者将获得例外。对不轮询的谴责:)@mazaneicha如果说
心跳.interval.ms
会话.timeout.ms
都相当大会怎么样?我的意思是,
CommitFailedException
会出现。那将是一个真正的耻辱:)因为心跳也被用来向消费者传达群体再平衡。但你是对的,理论上是可行的。