Kafka基础概念

一、组成结构

  1. broker(消息代理): 指kafka的服务器,存储消息
  2. producer (消息生产者): 消息产生的源头,负责生成消息并发送至broker
  3. consumer (消息消费者): 消息的使用方, 负责消费broker上的消息
  4. topic (主题): 生产者与消费者之间的订阅关系,可以理解为消息的分组方式 -> 生产者发送消息到指定的topic下,消费者从指定的topic获取消息消费
  5. partition (消息分区): 一个topic下会分成不同的分区,消息归集到topic后会进入分区被消费
  6. group (消费者组): 同类消费者的集合,一条消息只会被消费者组里的其中一个消费者消费(可以多个消费者组消费)
  7. offset (消息偏移量): 连续的、被用于定位分区内消息的***

二、结构图解

简单图例:

Kafka基础概念
  producerA、B两个生产者都可生成同一个topic类型的消息,该topic下分为三个分区,消息进入分区后被消费者消费。
  这张图可以简单展示消息的产生与消费的生命周期,此时没有加入消费者组的概念。

消费者组图例:

Kafka基础概念
如图:
  有两个topic,这两个topic分别有两个分区(P0,P3)、(P1,P2)
  
  有两个消费者组A、B分别包含消费者(C1,C2)、(C3、C4、C5、C6)
  
  对于第一个topic,分区P0和P3,两者产生的消息都会被消费者组A、B消费,但对于消费者组A来说,C1 C2只有一个能消费P0的消息。
即一条消息可以被多个消费者组消费,但一个消费者组只能有一个消费者来消费该消息。
  而当消费者组中有消费者挂掉之后,其他消费者会接收该消费者的消息,重新达到平衡。
  如下图,消费者组A中的C2挂掉,原本由C2消费的P1、P2的消息,将由C1来处理。
  Kafka基础概念

offset图例

Kafka基础概念
如图:
  该topic分为三个不同的分区,生产者在向三个分区发送消息(一条消息只进一个分区)的同时会在该分区记录这条消息的id,这个id就是消息的offset。
  为了避免消息被同一个消费者组重复消费,在zookeeper上会记录各个消费者组消费分区的offset。
  消费者组会各自管理该topic下不同分区的offset,以保证消息不会被同一个消费者组重复消费。由于消费者组各自分开管理自己的offset,不同消费者组不会存在线程安全问题,导致消息消费错序。

相关文章: