Kakfka是高吞吐量的分布式发布订阅消息系统。具备高吞吐、持久化、分布式等优秀特性。下面我们先根据下图对Kafka系统中的组件逐一介绍,再结合组件阐述其工作过程,以及各类特性实现。
Kafka系统组件
1)Producer:生产者,数据的发布者,将消息发布到Kafka的topic中。
2)Broker:服务器节点被称为Broker,每个服务器上有一个或多个kafka的实例。
3)Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。
4)Partition:Topic中的数据分割为一个或多个partition,每个topic至少有一个partition。
每个Partition中数据使用多个segment文件存储,同一个Partition中数据是有序的,不同的Partition无法保证有序
5)Consumer:消费者,从broker中读取数据,可以消费多个topic中的数据。
6)Consumer Group:每个Consumer属于一个特定的Consumer Group。
通过该分组实现了消息的广播与单播,同一Topic的一条消息只能被同一个Consumer Group内的一个Consumer消费,但多个Consumer Group可同时消费这一消息。
7)Leader:Kafka的副本机制,每一个Partition有多个副本,仅有一个leader,负责当前数据的读写。
8)Follower:与Leader保持数据同步。
9)zookeeper: 集群管理,元数据管理,Broker 注册、Topic注册、生产者负载均衡,消费者负责均衡。
Kafka数据写入
1)Producer从Zookeeper中获取Partition的Leader;
Producer发送消息到Broker时,按照一定路由机制选取Partition,路由机制有:
a.直接使用指定的Partition;
b.指定Key,通过对Key的Value值Hash选取一个Partition;
c.轮询选出一个Partition。
2)Producer将消息发送给Leader,Leader写入本地文件;
3)Follower从Leader处Pull消息写入本地后向Leader发生ACK;
4)Leader收到所有副本的ACK后,增加HW,并向Producer发送ACK。
Kafka数据存储
1)Partition分区
每一条Message 包含了以下三个属性:offset,MessageSize,data
2)segment分段
多个segment组成一个Partition,每个segment数据文件以该段中最小的offset 命名,文件扩展名为.log。这一在查找指定的offset,可以通过二分法查找
3)数据文件索引
每一个segment文件对应了一个同名的.index文件,并且在索引文件中每隔一定的字节简历一个索引,即稀疏索引。