【赵渝强老师】Kafka的体系架构_消息系统


  Kafka消息系统是一个典型的分布式系统,其组成部分包括:消息生产者(Producer)、消息消费者(Consumer)、消息服务器(Broker)以及分布式协调服务ZooKeeper。一个典型的Kafka消息系统的集群架构如下图所示。

【赵渝强老师】Kafka的体系架构_消息系统_02


  视频讲解如下:

Kafka的体系架构


【赵渝强老师】Kafka的体系架构


  下表列举了Kafka中的一些术语,这些术语对于掌握Kafka的内容非常重要。

【赵渝强老师】Kafka的体系架构_服务器_03

一、消息服务器Broker

  Broker是消息的服务器。生产者往Brokers里面的指定主题中写入消息,消费者从Brokers里面拉取指定主题的消息,然后进行业务处理。Broker在中间起到一个代理保存消息的作用。

  另一方面,Broker没有副本机制。因此一旦Broker宕机,该Broker的消息将都不可用。消费者可以回溯到任意位置重新从Broker中进行消息的消费。当消费者发生故障时,可以选择最小的消息偏移量地址进行重新读取消费消息。

二、主题、分区与副本

  Kafka中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题,而消费者负责订阅主题进行消费。主题可以分为多个分区,一个分区只属于某一个主题。下面为列举了主题和分区的关系:

  • 同一主题下的不同分区包含的消息不同。生产者发送给主题的消息都是具体发送到某一个分区中。
  • 消息被追加到分区日志文件的时候,Broker会为消息分配一个特定的偏移量地址(offset)。该地址是消息在分区中的唯一标识,Kafka通过它来保证消息在分区的顺序性。
  • offset不能跨越分区,也就是说Kafka保证的是分区有序而不是主题有序;

  下图展示了主题与分区之间的关系。

【赵渝强老师】Kafka的体系架构_kafka_04


  在这个例子中,Topic A有3个分区。消息由生产者顺序追加到每个分区日志文件的尾部。Kafka中的分区可以分布在不同的Kafka Broker上,从而支持负载均衡和容错的功能。也就是说,Topic是一个逻辑单位,它可以横跨在多个Broker上。

三、生产者

  消息的生产者负责将消息发送到Kafka的Broker上。生产者生产的消息可以是字符串类型的消息,也可以是一个对象。

四、消息的消费

  消息的消费者负责消费和处理消息。在Kafka消息系统中采用了消费者组的方式来管理消费者。