更改Kafka配置max.poll.interval.ms导致一名消费者卡在(重新)加入组中

时间:2018-11-28 07:02:08

标签: java apache-kafka

我正在使用Kafka版本0.10.2.0,并且我在云上有两个VM,每个VM都有一个Kafka使用者。 这两个消费者属于同一个消费群体。 在我将Kafka使用者配置max.poll.interval.ms更新为Integer.MAX_VALUE之前,它可以正常工作。 重新启动虚拟机时,虚拟机首先启动可以正常运行。稍后启动的虚拟机将始终停留在(重新)加入组中

有人知道是什么原因造成的吗?

我进行此更改是因为我在版本0.10.2.1中看到,max.poll.interval.ms的默认值从300000更改为Integer.MAX_VALUE

2 个答案:

答案 0 :(得分:0)

似乎不是由“ max.poll.interval.ms”引起的问题

基于Kafka文档(https://kafka.apache.org/documentation/

The way consumption is implemented in Kafka is by dividing up the partitions in 
the log over the consumer instances so that each instance is the exclusive 
consumer of a "fair share" of partitions at any point in time. This process of 
maintaining membership in the group is handled by the Kafka protocol 
dynamically. If new instances join the group they will take over some 
partitions from other members of the group; if an instance dies, its partitions 
will be distributed to the remaining instances.

我将检查是否有足够的分区可分配给这些使用者。

此外,建议您在Kafka日志中激活DEBUG模式。通常,它会显示很多有关加入过程内部的信息。

答案 1 :(得分:0)

这是对0.10.1.0版本的更改:

  

新的Java Consumer现在支持从后台线程进行心跳。有一个新的配置max.poll.interval.ms,它控制使用者主动退出组之前轮询调用之间的最长时间(默认为5分钟)。 配置request.timeout.ms的值必须始终大于max.poll.interval.ms ,因为这是使用者重新平衡时JoinGroup请求可以在服务器上阻止的最长时间,因此我们将其默认值更改为刚好超过5分钟。

也适用于您的版本

版本为0.10.2.0的BTW,它们对于kafka使用者而言并没有更改max.poll.interval.ms,但对于kafka 使用者而言,则未更改:

  

内部Kafka Streams使用者max.poll.interval.ms的默认值从300000更改为Integer.MAX_VALUE