我正在浏览Kafka的消费者配置。
什么是引发重新平衡的参数?例如,以下参数是?我们需要更改的任何其他参数或默认值就足够了
connections.max.idle.ms在此配置指定的毫秒数后关闭空闲连接。长540000中等
我们还有三个不同的主题
假设上述情况是否有效(不一定是最佳做法) - 如果其中一个主题是非常轻微的流量,它是否会导致消费者群体重新平衡。
后续问题 - 哪些因素会影响再平衡及其表现。
答案 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 。它的手段很明显。
由此,我们也可以了解到在轮询之间做大量工作是不好的做法,开销工作可能会阻止心跳并导致会话超时。