消费者组模式
创建 N 个消费者实例(new KafkaConsumer()
),为这些消费者实例指定同一个 group.id
,他们即属于同一个消费组。
在同一个消费组中的消费实例可以收到消息,但一个分区的消息只会发往一个消费实例。
某个 Topic 有四个分区 p0 p1 p2 p3
,同时创建了两个消费组 groupA,groupB
- A 消费组中有两个消费实例
C1、C2
- B 消费组中有四个消费实例
C3、C4、C5、C6
- A 组中的 C1 消费了 P0 和 P3 分区;C2 消费 P1、P2 分区
- B 组有四个实例,所以每个实例消费一个分区;也就是消费实例和分区是一一对应的
这里的消费实例简单的可以理解为
new KafkaConsumer
,和进程无关,在一个消费组中可以创建多个消费实例来达到高可用、高容错的特性,不会出现单线程以及独立消费者挂掉之后数据不能消费的情况。同时基于多线程的方式也极大的提高了消费效率。
消费组自平衡
新增消费实例或者是消费实例挂掉时 ,Kakfa
重新分配消费实例与分区的关系就被称为消费组 Rebalance
发生这个的前提条件一般有以下几个:
- 消费组中新增消费实例。
- 消费组中消费实例 down 掉。
- 订阅的 Topic 分区数发生变化。
- 如果是正则订阅 Topic 时,匹配的 Topic 数发生变化也会导致
Rebalance
消费者组模式消费数据,扩展性非常好。当性能不足新增分区时只需要启动新的消费实例加入到消费组中即可。