Kafka消费者(组)触发重新平衡的条件

Dur*_*eep 6 apache-kafka kafka-consumer-api

我正在查看Kafka的Consumer Config。

触发重新平衡的参数是什么?例如,以下参数将为?。我们需要更改或将其设为默认值的任何其他参数

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

另外,我们有三个不同的主题

  1. 具有来自多个主题的相同消费者组(相同ID)是一个坏主意吗?
  2. 假设上述情况是否有效(不一定是最佳实践)-如果主题之一是流量非常小,将导致消费者组重新平衡。

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

Gua*_*Zuo 6

这些情况将触发组重新平衡:

任何已订阅主题列表的分区数更改

主题已创建或删除

消费者组的现有成员死亡

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

具有来自多个主题的相同消费者组(相同ID)是一个坏主意吗?

至少它是有效的,无论好坏,都取决于您的详细情况。官方的Java客户端api支持此功能,请参见以下方法定义:

public void subscribe(Collection<String> topics,
             ConsumerRebalanceListener listener)
Run Code Online (Sandbox Code Playgroud)

它接受一系列主题。

如果主题之一是流量非常小,它将导致消费者组重新平衡。

不,因为没有在条件中列出。如果仅从主题方面考虑。仅当删除主题或更改分区计数时,才会发生重新平衡。

更新。

感谢@Hans Jespersen对会话和听音的评论。

这是由kafka Consumer Javadoc引用的:

订阅了一组主题后,使用者将在调用poll(long)时自动加入该组。轮询API旨在确保消费者的活力。只要您继续呼叫民意调查,使用者就将留在组中并继续从分配给它的分区中接收消息。在幕后,轮询API将周期性的心跳发送到服务器。当您停止致电民意调查(也许是因为引发异常)时,将不会发送任何心跳信号。如果在服务器接收到心跳之前经过了一段配置的会话超时,则使用方将被踢出该组,并将重新分配其分区。

在您的问题中,您会问哪些参数会触发重新平衡

在这种情况下,有两个与重新平衡有关的配置。这是session.timeout.msmax.poll.records。其手段是显而易见的。

由此,我们还可以了解到,在轮询之间做很多工作是一种不好的做法,开销的工作可能会阻塞心跳并导致会话超时。

  • 在 1 个组内的多个消费者(针对不同主题)中,如果消费者声明已死亡 - 整个组将重新平衡,它将触发该组中每个主题的重新平衡,还是仅触发消费者附加的主题? (3认同)
  • max.poll.records 仅控制消费者在 poll 调用中获得的最大消息数(将获取更多消息,但只会提交该偏移量),并且不参与重新平衡。@HansJespersen 正在谈论 `max.poll.interval.ms` (2认同)