7.消费者与消费组

消费者与消费组

与生产者对应的是消费者,应用程序可以通过 KafkaConsumer 来订阅主题,并从订阅的主题拉取消息。不过在使用 KafkaConsumer 之前需要了解消费者与消费组的概念,否则无法理解如何使用 KafkaConsumer。本章首先讲解消费者和消费组之间的关系,进而再细致的讲解如何使用 KafkaConsumer。

消费者(Consumer)负责订阅主题(Topic),并从订阅的主题上拉取消息。与其他消息中间间不同的是,再Kafka消费者观念里还有一层消费组(Consumer Group),一个消费者只能有一个消费组,一个消费组可能有多个消费者。当消息发送到主题后,主题只会把消息发送给订阅它的消费组内的一个消费者
在这里插入图片描述如上图所示,按照Kafka的默认规则,消费组A每个消费者分配到了一个分区,消费组B每个消费者分配到了2个分区,两个消费组之间互不影响。每个消费者只能消费所分配到的分区中的消息。换言之,每一个分区只能被一个消费组中的一个消费者消费

在这里插入图片描述
我们在来看一下消费组内的消费者个数变化时所对应的分区分配的演变。假设目前消费组内只有一个消费者,订阅了一个主题,该主题有7个分区,也就是说消费者 C0 订阅了7个分区。参考上图。
在这里插入图片描述
此时,消费组又添加了一个消费者 C1 ,按照既定逻辑,需要将原来消费者 C0 的部分分区分配给 C1,如上图所示。消费者 C0 和 C1 各自负责消费所分配到的分区,彼此之间并无逻辑上的干扰。
在这里插入图片描述
紧接着消费组又加入一个消费者,那么消费者C0、C1和C2按照上图中的方式各自负责消费所分配到的分区。

消费者和消费组的这种模型可以让整体的消费能力具备横向伸缩性,可以增加或减少消费者的个数来提高或减少整体消费能力。如果分区固定的情况下,一直增加消费者并不一定能提高消费能力,也可能导致消费者比分区多,那么多出的消费者就不会有分区来消费。
在这里插入图片描述
以上分配逻辑都是基于默认的分区分配策略进行的分析,也可以通过消费者客户端的 partition.assignment.strategy 参数来设置消费者与订阅主题之间的分区分配策略 range 或 roundrobin。partition.assignment.strategy参数默认的值是range

对于消息中间件而已,一般有两种消息投递模式:点对点(P2P,Point-to-Point)模式和发布/订阅(Pub/Sub)模式。点对点模式是基于队列的,生产者将消息发送到队列,消费者从队列接收消息。发布/订阅模式定义了如何向一个内容节点发送和订阅消息,这个内容节点在Kafka中为主题(Topic)相当于一个中介,生产者发布消息到主题,而消费者消费所订阅的主题。主题使消息的订阅者和发布者互相保持独立,不需要接触就可以进行消息的传递,发布/订阅模式在消息一对多广播时使用。Kafka同时支持这两种模式,正是得益于消费者和消费组模型的契合:

  • 如果所有的消费者都属于同一个消费组,那么消息就会被均衡的投递给每一个消费者,也就是一个消费组内每条消息只会被一个消费者处理,这就相当于点对点模式。
  • 如果所有的消费者都不属于一个消费组,那么消息就会投递给订阅该主题的每个消费组中的一个消费者,这就相当于发布/订阅模式。
    消费组是一个逻辑上的概念,它将旗下的消费者归为一类,每一个消费者只隶属于一个消费组 每个消费组都会有一个固定的名称,消费者在进行消费前需要指定其所属的消费组的名称,可以在消费者客户端通过 group.id 参数来配置,默认为空字符串。

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

发布了76 篇原创文章 · 获赞 1 · 访问量 5100

猜你喜欢

转载自blog.csdn.net/qq_38083545/article/details/93879367
今日推荐