Kafka 的整体架构非常简单,是显式分布式架构。Kafka 是生产者/消费者模式,向Kafka 中生产消息的一端叫作生产者,生产者可以有多个,这样可以由多个生产者向Kafka 中生产消息。消息写往Kafka 中的Broker 节点,由于Kafka 中采用了零拷贝技术,消息直接写到Broker 节点的磁盘上。Broker 节点也可以有多个,这样为Kafka 集群的高可用及分布式提供了保证。消费Kafka 消息的一端叫作消费者,消费者也可以有多个,这样可以保证消息的并行消费,这也是Kafka 分布式消息系统更适用于大数据场景的原因之一。
数据从生产者发送到Broker,Broker 承担着中间缓存和分发的作用,类似于缓存,即活跃的数据和离线处理系统之间的缓存。ZooKeeper 在Kafka 集群中起着协调作用,保存Kafka集群的元数据信息,可以为Kafka 的故障恢复提供保障。Kafka 集群的结构图如图6-1所示。
图6-1 Kafka 架构图
Kafka 中有如下几个概念。
1.Producer
Producer 是Kafka 分布式消息系统的消息生产者,自己决定将消息写入Kafka 中Topic 的哪个分区。生产者生产消息时,消息可以是K,V 格式。默认生产者生产消息时,消息的Key 为空,消息是轮询写往某个Topic 中的。如果生产者的消息指定K,那么默认消息写往Partition 的方式就是基于K 的Hash 值与Topic 中Partition 的个数取模,每条消息按照这种规则写入某个Partition 中。
2.Borker
Broker 是组成Kafka 集群的节点,一个Kafka 集群中可以有多个Broker。生产者生产的消息是直接写到Broker 节点的磁盘上的,每个Broker 可以管理多个Topic 的Partition,负责Partition 消息的读写和存储。Broker 之间是没有主从关系的,当一个Broker挂掉后,当前Broker 节点上管理的Partition 由ZooKeeper 协调管理并寻找新的Broker 节点来管理。
3.Topic(www.xing528.com)
生产者将消息写往Topic。Topic 就是消息队列,一类消息的总称。Kafka 将消息写往不同的Topic 的主要原因是将不同类别的消息归类到不同的Topic 中,这样也方便后期消费者消费。Topic 是由Partition 组成的,可以在创建Topic 时指定当前Topic 由几个Partition 组成。Topic 由多个Partition 组成主要是为了解决消息的并行消费问题,每个Partition 可以同时被一个消费者消费,那么多个Partition 就可以并行地为多个消费者同时消费。
4.Partition
Partition 是组成Kafka Topic 的基本单元,写往Kafka 中的消息是直接写到Partition 上的。Partition 对应Broker 节点上的一个目录,内部消息是强有序的。消息写到Partition 上是直接追加写入的,所以在Partition 内部消息,是严格的FIFO,这样在同一个Partition 中也保证的消息的一致性。
每个Partition 还有副本,这些副本分布在不同的Broker 节点上。每个Partition 都由一个Broker 节点来管理,这个Borker 节点就叫作这个Partition 的Leader。当前这个Partition的副本会自动同步Leader 节点管理的Partition 的数据,保证各个Partition 副本数据的一致性。
5.Consumer
Consumer 是消息的消费者,每个Consumer 都有各自的消费者组的概念。不同的消费者组消费同一个Topic 中的数据时,它们之间互不影响。同一个消费者组内有不同的消费者,这些消费者消费同一个Topic 消息时,这个Topic 中的相同的消息只能被消费一次。
Topic 中的某个Partition 只能同时被同一个消费者组内的消费者连接消费,这样如果某个Topic 的分区数为10,那么这个Topic 可以并行地被一个消费者组内的10 个消费者同时连接消费,这样就大大增加消费的效率。
6.ZooKeeper
ZooKeeper 在Kafka 集群中主要有两个作用:第一,可以存储Kafka 集群的一些元数据信息,这些数据信息包括Kafka 集群的节点,Kafka 集群的Topic 信息、Broker 信息等。第二,在Kafka 的老版本中还负责存储消费者消息的offset,例如在Kafka 0.8.2 版本之前,所有消费者消费的消息的offset 都是存储在ZooKeeper 中的。在Kafka 0.8.2 之后的版本,消息的offset 默认由Kafka 管理。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。