一、消费者与消费组概念
消费者(cunsumer)负责订阅kafka中的主题(topic),并且从主题上拉取消息。与其他的一些消息中间件不同的是:在kafka的消费理念中还有一层消费组的概念,每个消费者都有一个对应的消费组。当消息发布到主题后,只会被投递给订阅它的每个消费组中一个消费者。
消费者与消费组
下面我们来看下消费组内的消费者个数变化时对应的分区分配演变。假设目前消费组内只有一个消费者c0,订阅了一个主题,该主题包含7个分区,也就是说c0订阅了该7个分区:分配图如下:
一个消费者分配图
此时当消费组内新增了一个消费者c1后,分配图如下所示:
两个消费者的情况
消费者与消费组的这种模型可以让整体的消费能力具备横向伸缩性。我们可以增加消费者数量来提升整体消费能力,但是分区数固定情况下,如果消费者数量大于分区数时,将会出现有消费者分配不到分区。如下图所示7个分区8个消费的情况下,就必定会有一个消费者无法消费任何消息。其中消费者c7就没法进行数据的消费
二、为什么kafKa要引入消费组
对于中间件而言,一般有两种投递模式:点对点模式和发布订阅模式。
点对点模式是基于队列的,生产者发送消息到队列,消费者从队列中获取消息。但是消息一旦被消费,就会从队列中删除,而且只能被下游的一个Consumer消费。
发布订阅模式:发布订阅模式定义 了如何向一个内容节点发布和订阅消息,这个内容节点称为主题,主题可以认为是消息传递的中介,消息发布者将消息发布某个主题上,而消息订阅者从主题中订阅消息。
-
1、引入消费组,一个消费者负责消费一个或者多个分区消息。增减消费者数量可以提升\降低整体消费的能力。
-
2、通过消费组,kafka可以同时支持点对点模式和发布订阅模式。