Kafka Consumer(Group)触发重新平衡的条件

时间:2017-08-25 19:31:06

标签: apache-kafka kafka-consumer-api

我正在浏览Kafka的消费者配置。

什么是引发重新平衡的参数?例如,以下参数是?我们需要更改的任何其他参数或默认值就足够了

connections.max.idle.ms在此配置指定的毫秒数后关闭空闲连接。长540000中等

我们还有三个不同的主题

  1. 让同一个消费者组(相同ID)消耗多个主题是不错的主意。
  2. 假设上述情况是否有效(不一定是最佳做法) - 如果其中一个主题是非常轻微的流量,它是否会导致消费者群体重新平衡。

    后续问题 - 哪些因素会影响再平衡及其表现。

1 个答案:

答案 0 :(得分:3)

这些条件会触发群组重新平衡:

  

任何订阅主题列表的分区数都会发生变化

     

创建或删除主题

     

消费者群体的现有成员去世

     

通过加入API将新成员添加到现有使用者组

让同一个消费者群体(相同ID)消耗多个主题是不错的主意。

至少它是有效的,无论好坏,都取决于你的详细情况。 这是官方java客户端api支持的,请参阅此方法定义:

public void subscribe(Collection<String> topics,
             ConsumerRebalanceListener listener)

它接受一系列主题。

如果其中一个主题是非常轻量级的流量,它是否会导致消费者群体重新平衡。

不,因为这没有在条件中列出。如果我们只从主题方面考虑它。只有当主题被删除或分区计数发生变化时,才会发生反对,。

更新。

感谢@Hans Jespersen关于会话和听力的评论。

这是由kafka Consumer javadoc引用的:

  

订阅一组主题后,当调用 poll(long)时,消费者将自动加入该组。 poll API旨在确保消费者的活力。只要您继续调用poll,消费者将留在该组中并继续从分配的分区接收消息。 在封面下,poll API会定期向服务器发送心跳;当你停止调用poll(可能是因为抛出了异常)时,就不会发送心跳。如果在服务器收到心跳之前经过已配置的会话超时的句点,则将从该组中踢出该用户,并重新分配其分区。

在您的问题中,您要求将触发重新平衡的参数是什么

在这种情况下,有两个配置与重新平衡有关。它是 session.timeout.ms max.poll.records 。它的手段很明显。

由此,我们也可以了解到在轮询之间做大量工作是不好的做法,开销工作可能会阻止心跳并导致会话超时。