1概念:
消费者负责订阅主题,并且从主题上拉取消息,与其他消息中间件的不同是,kafka的消费理念中还有一个消费者组的概念,每个消费者都对应一个消费者组,多个消费者 组成一个消费者组。当消息发布到主题之后,会被消费组中的一个固定的消费者消费。消费者在创建的时候会指定消费者组 group.id来配置 消费者属于哪个消费者组
2消费规则
多个消费者组成一个消费者组,消费者订阅主题,当主题存在消息的时候,消费者负责消费topic 的消息。 每个消费者组,只能从主题中拉取一次消息,每个分区的消息只能被消费者组中的一个消费者消费。
如下入,主题有4个分区 P0 P1 P2 P3 和两个消费者组,A B 两个都订阅了该主题。消费者组A中有 C0 C1 C2 C3 四个消费者,消费者组B 有两个消费者 C4和C5。
消费者组内的消费者个数变换时,分配规则也会跟着变化,假设消费者组内只有一个消费者C0 订阅了一个主题, 该主题有7个分区 消费者分配如下
当该消费者组内再添加一个消费者C1 则消费者分配规则如下
当消费者组内有8个消费者时,会有一个消费者不会消息主题的消息(C7)因为每个分区的消息只能被消费者组内一个消费者消费。
上面是消费者默认的消息分配规则,可以通过消费者客户端参数修改消费规则(后续再说)
3、点对点和发布订阅
因为kafka只有发布订阅模式,但是我们可以通过消费者组这个概念 来实现点对点 和发布订阅的功能。
3.1(点对点) 如果所有的消费者都属于一个消费者组,那么消息会被均匀的分配给每一个消费者,即每条消息只能被一个消费者消费。
3.2(发布订阅)如果所有的消费者都属于不同的消费者组,即每个消费者组中都只有一个消费者(每个消费者组都可以消费topic的消息 即每条消息都会被所有的消费者组消费,每个消费者组又只有一个消费者,所以所有的消费者都会消费消息) 这样就实现了发布订阅模式