afka 消费者组(Consumer Group)是 Kafka 提供的可扩展且具有容错性的消费者机制。它可以避免传统消息模型的缺陷,同时兼具消息队列模型和发布订阅模型的优点。在实际场景中,使用进程更为常见一些。Group ID 是一个字符串,在一个 Kafka 集群中,它标识唯一的一个 Consumer Group。Consumer Group 下所有实例订阅的主题的单个分区,只能分配给组内的某个 Consumer 实例消费。这个分区当然也可以被其他的 Group 消费。理想情况下,Consumer 实例的数量应该等于该 Group 订阅主题的分区总数,这样能最大限度地实现高伸缩性。注意:Consumer Group 中的实例是以分区为单位进行消费的,如果实例数大于分区数就会导致有的实例无法消费到任何消息。

关于如何避免无效 Rebalance,您可以在创建消费者时设置参数 `enable.auto.commit=false`,并且在程序中手动提交事务。这样可以避免因为网络延迟等原因导致 Rebalance 失败。

在Kafka中,Consumer Group Rebalance是消费者组(Consumer Group)内部的一个重要机制,它指的是消费者实例之间重新分配Topic分区(Partition)的过程。在Kafka集群中,Rebalance是为了确保消费者组能够均匀地消费数据而设计的 。

一般来说,不推荐设置大于总分区数的Consumer实例。这样会导致每个Consumer实例只能获得少量的分区,从而影响其性能和可用性。

Rebalance本质上是一种协议,规定了一个Consumer Group下的所有Consumer如何达成一致,来分配订阅Topic的每个分区。比如某个Group下有20个Consumer实例,它订阅了一个具有100个分区的Topic。正常情况下,Kafka平均会为每个Consumer分配5个分区。这个分配的过程就叫Rebalance。

那么Consumer Group何时进行Rebalance呢?Rebalance的触发条件有3个:1)组成员数发生变更;2)订阅主题数发生变更;3)订阅主题的分区数发生变更。

afka中的消费者组(Consumer Group)内部的一个重要机制是重平衡(Rebalance),它指的是消费者实例之间重新分配Topic分区(Partition)的过程。在Kafka集群中,Rebalance是为了确保消费者组能够均匀地消费数据而设计的。如果Consumer Group下的Consumer实例数量发生变化,就一定会引发Rebalance。这是Rebalance发生的最常见的原因。

除了手动启动或停止之外,Consumer实例可能会被Coordinator错误地认为“已停止”从而被“踢出”Group。如果是这个原因导致的Rebalance,我们就不能不管了。

为了避免无效的Rebalance,可以从以下几个方面入手:1)组成员数量发生变化;2)订阅主题数量发生变化;3)订阅主题的分区数发生变化。

afka Consumer 心跳参数包括:session.timeout.ms、heartbeat.interval.ms 和 max.poll.interval.ms。其中,session.timeout.ms 是 Kafka 多长时间感知不到一个 Consumer 就认为他故障了,默认是 10 秒;heartbeat.interval.ms 是 Consumer 发送心跳请求的时间间隔,必须得保持心跳才能知道 Consumer 是否故障了,默认值为 3000 毫秒;max.poll.interval.ms 是如果在两次 poll 操作之间,超过了这个时间,那么就会认为这个 Consumer 处理能力太弱了,会被踢出消费组,分区分配给别人去消费 。

为了避免无效 Rebalance,建议调整以下 4 个参数:session.timeout.ms、heartbeat.interval.ms、max.poll.interval.ms 和 GC 参数。

afka Consumer Group Rebalance 是 Kafka 提供的一种机制,用于重新分配 Topic 分区的过程。Rebalance 会影响 Consumer 端 TPS,Coordinator 协调者组件完成订阅主题分区的分配的过程,该消费组下所有实例都不能消费任何消息。如果你的组成员消费者实例很多的话,Rebalance 很慢,对业务会造成一定的影响。Rebalance 效率不高。当前 Kafka 的设计机制决定了每次 Rebalance 时,Consumer Group 下的所有成员都要参与进来,而且通常不会考虑局部性原理,但局部性原理对提升系统性能是特别重要的。

建议消费者组中的实例数等于 Topic 的分区数。非必要 Rebalance 包括因为 Consumer没能及时发送心跳请求,导致被踢出”Group而引发的和 Consumer 消费时间过长导致的。减少 Rebalance 的 4个参数:session.timeout.ms、heartbeat.interval.ms、max.poll.interval.ms、GC 参数。