kafka-3.1消费者与消费组

3.1 消费者与消费组

1.消费者和消费组介绍

消费者( Consumer)负责订阅Kafka中的主题( Topic),并且从订阅的主题上拉取消息.与其他一些消息中间件不同的是:在 Kafka的消费理念中还有一层消费组( Consumer Group)的概念,每个消费者都有一个对应的消费组。当消息发布到主题后,只会被投递给订阅它的每个消费组中的一个消费者 。

以下图为例,某个主题中共有 4 个分区( Partition) : PO、 Pl、 P2、 P3。 有两个消费组 A和 B 都订阅了这个主题,消费组 A 中有 4 个消费者 (CO、 Cl、 C2 和 C3),消费组 B 中有 2个消费者 CC4 和 CS) 。按照 Kafka默认的规则,最后的分配结果是消费组 A 中的每一个消费 者分配到1个分区,消费组 B 中的每一个消费者分配到 2个分区,两个消费组之间互不影响。每个消费者只能消费所分配到的分区中的消息。换言之 每一个分区只能被一个消费组中的一个消费者所消费.

image.png

假设目前某消费组内只有一个消费者 co,订阅了一个主题,这个主题包含 7 个分区: PO、 Pl、 P2、 P3、 P4、PS、 P6o 也就是说,这个消费者co订阅了7个分区,具体分配情形参考图3-2。

image.png

此时消费组内又加入了一个新的消费者 Cl,按照既定的逻辑,需要将原来消费者 co 的部分分区分配给消费者 Cl 消费 , 如图 3-3 所示 。 消费者 co 和 Cl 各自负责消费所分配到的分区 ,彼此之间并无逻辑上的干扰

消费者与消费组这种模型可以让整体的消费能力具备横向伸缩性,我们 可以增加(或减少) 消费者的个数来提高 (或降低〕整体的消费能力 。 对于分区数固定的情况, 一昧地增加消费者并不会让消费能力 一直得到提升,如果消费者过多,出现了消费者的个数大于分区个数的情况,**就会有消费者分配不到任何分区**。

2.两种消息投递模式

对于消息中间件而言,一般有两种消息投递模式:点对点(P2P, Point-to-Point)模式和发**布/订阅**( Pub/Sub)模式.

点对点模式是基于队列的,消息生产者发送消息到队列,消息消费者从队列中接收消息。

发布订阅模式定义了如何向一个内容节点发布和订阅消息,这个内容节点称为主题(Topic),主题可以认为是消息传递的中介,消息发布者将消息发布到某个主题,而消息订阅者从主题中订阅消息.主题使得消息的订阅者和发布者互相保持独立,不需要进行接触即可保证消息的传递,发布/订阅模式在消息的一对多广播时采用.Kafka同时支持两种消息投递模式,而这正是得益于消费者与消费组模型的契合:

  • 如果所有的消费者都隶属于同一个消费组,那么所有的消息都会被均衡地投递给每一个消费者,即每条消息只会被一个消费者处理,这就相当于点对点模式的应用 。
  • 如果所有的消费者都隶属于不同的消费组,那么所有的消息都会被广播给所有的消费者,即每条消息会被所有的消费者处理,这就相当于发布/订阅模式的应用.

消费组是一个逻辑上的概念,它将旗下的消费者归为一类 ,每一个消费者只隶属于一个消费组。每一个消费组都会有一个固定的名称,消费者在进行消费前需要指定其所属消费组的名称,这个可以通过消费者客户端参数 group.id来配置,默认值为空宇符串。

消费者并非逻辑上的概念它是实际的应用实例它可以是一个线程,也可以是一个进程。同一个消费组内的消费者既可以部署在同一台机器上,也可以部署在不同的机器上。

本文标题:kafka-3.1消费者与消费组

文章作者:Jesse

发布时间:2021年01月05日 - 17:01

最后更新:2021年01月05日 - 22:01

原始链接:https://jesse.top/2021/01/05/Linux-分布式&消息队列/kafka/3-消费者/3.1 消费者与消费组/

许可协议: 禁止商业用途 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!