Consumer Group 特性

  • Consumer Group 是 Kafka 提供的可扩展且具有容错性的消费者机制。
  • 一个组内可以有多个 Consumer,
  • 多个 Consumer 共同消费某个 Topic,
  • 每个分区只能由同一个消费者组内的一个 Consumer 实例来消费。
  • Group ID 是一个字符串,在一个 Kafka 集群中,它标识唯一的一个 Consumer Group。
  • 所有的实例属于一个 Group,是点对点模式;不同 Group,是发布/订阅模式。

Consumer Group 与 Consumer 的关系是动态维护的
当一个 Consumer 进程挂掉或者是卡住时,该 Consumer 所订阅的 Partition 会被重新分配到改组内的其他 Consumer 上,当一个 Consumer 加入到一个 Consumer Group 中时,同样会从其他的 Consumer 中分配出一个或者多个 Partition 到这个新加入的 Consumer。

负载均衡

  1. 分区分配策略
    • Kafka 提供了多种分区分配策略,如 RangeAssignor、RoundRobinAssignor 和 StickyAssignor,用于决定消费者如何分配分区。
    • 默认情况下,Kafka 使用 RangeAssignor,将分区按顺序分配给消费者。
  2. 再平衡(Rebalance)
    • 当消费者组中的消费者数量发生变化(如新增或移除消费者),Kafka 会触发再平衡过程,重新分配分区给消费者。
    • 再平衡确保分区在消费者之间均匀分布,实现负载均衡。
  3. 消费者协调器(Consumer Coordinator)
    • 每个消费者组都有一个协调器,负责管理消费者组的状态和再平衡过程。
    • 协调器与 Kafka Broker 中的 GroupCoordinator 进行通信,确保消费者组的状态同步。
  4. 心跳机制(Heartbeat)
    • 消费者定期向协调器发送心跳,以表明其仍然活跃。
    • 如果协调器在一定时间内未收到消费者的心跳,会认为该消费者已失效,触发再平衡。