kafka的架构

606 阅读3分钟

「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战

架构案例

image.png

  • Kafka Cluster: 由多个服务器组成。每个服务器单独的名字broker(掮客)。
  • kafka broker: kafka集群中包含的服务器
  • Kafka Producer: 消息生产者、发布消息到kafka集群的终端或服务。
  • Kafka consumer: 消息消费者、负责消费数据。
  • Kafka Topic: 主题,一类消息的名称。存储数据时将一类数据存放在某个topci下,消费数据也是消费一类数据。
    • 订单系统:创建一个topic,叫做order。
    • 用户系统:创建一个topic,叫做user。
    • 商品系统:创建一个topic,叫做product。

注意:Kafka的元数据都是存放在zookeeper中。

架构剖析

kafka架构的内部细节剖析:

image.png

image.png

说明:kafka支持消息持久化,消费端为拉模型来拉取数据,消费状态和订阅关系有客户端负责维护,消息消费完 后,不会立即删除,会保留历史消息。因此支持多订阅时,消息只会存储一份就可以了。

  • Broker:kafka集群中包含一个或者多个服务实例,这种服务实例被称为Broker
  • Topic:每条发布到kafka集群的消息都有一个类别,这个类别就叫做Topic
  • Partition:分区,物理上的概念,每个topic包含一个或多个partition,一个partition对应一个文件夹,这个文件夹下存储partition的数据和索引文件,每个partition内部是有序的

关系解释

  • Topic & Partition
    • Topic就是数据主题,是数据记录发布的地方,可以用来区分业务系统。
    • Kafka中的Topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。
    • 一个topic为一类消息,每条消息必须指定一个topic。
    • 对于每一个topic, Kafka集群都会维持一个分区日志。如下图
    • 每个分区都是有序且顺序不可变的记录集,并且不断地追加到结构化的commit log文件。
    • 分区中的每一个记录都会分配一个id号来表示顺序,称之为offffset,offffset用来唯一的标识分区中每一条记录。

image.png

image.png

在每一个消费者中唯一保存的元数据是offffset(偏移量)即消费在log中的位置,偏移量由消费者所控制:通常在读取记录后,消费者会以线性的方式增加偏移量,但是实际上,由于这个位置由消费者控制,所以消费者可以采用任何顺序来消费记录。例如,一个消费者可以重置到一个旧的偏移量,从而重新处理过去的数据;也可以跳过最近的记录,从"现在"开始消费。

这些细节说明Kafka 消费者是非常廉价的—消费者的增加和减少,对集群或者其他消费者没有多大的影响。