回想一下,我们搭建kafka集群是如何搭建?修改kafka得配置文件,多个Kafka服务注册到同一个zookeeper集群上的节点,会自动组成集群。
学习服务端原理,通常我们是去读服务端的那些抽象的代码,但是Kafka为了保证高吞吐,高性能,高可扩展的三高架构,很多具体设计都是相当复杂的。如果直接跳进去学习研究,估计我们很快就会晕头转向。那么有没有一些可见的东西让我们更具体的理解Kafka的Broker运行机制呢?
kafka依赖于zookeeper,Kafka会将每个服务的不同之处,也就是状态信息,保存到Zookeeper中。通过Zookeeper中的数据,指导每个Kafka进行与其他Kafka节点不同的业务逻辑。而将状态信息抽离后,剩下的数据,就可以直接存在Kafka本地,所有Kafka服务都以相同的逻辑运行。这种状态信息分离的设计,让Kafka有非常好的集群扩展性。
既然kafka依赖这么多的存储数据,那么我们就从可见的存储数据的角度来理解分析一下Kafka的Broker运行机制。
1. kafka在zookeeper中整体的数据
Kafka将状态信息保存在Zookeeper中,这些状态信息记录了每个Kafka的Broker服务与另外的Broker服务有什么不同。通过这些差异化的功能,共同体现出集群化的业务能力。这些数据,需要在集群中各个Broker之间达成共识,因此,需要存储在一个所有集群都能共同访问的第三方存储中。
这些共识数据需要保持强一致性,这样才能保证各个Broker的分工是同步、清晰的。而基于CP实现的Zookeeper就是最好的选择。另外,Zookeeper的Watcher机制也可以很好的减少Broker读取Zookeeper的次数。
Kafka在Zookeeper上管理了哪些数据呢?这个问题可以先回顾一下Kafka的整体集群状态结构,然后再去Zookeeper上验证。
Kafka的整体集群结构如下图。其中红色字体标识出了重要的状态信息。
这些状态信息都被Kafka集群注册到了Zookeeper中。Zookeeper数据整体如下图:
对于Kafka往Zookeeper上注册的这些节点,大部分都是比较简明的。
下面就从这些Zookeeper的基础数据开始,来逐步梳理Kafka的Broker端的重要流程
2. Controller Broker选举机制
3. Leader Partition选举机制
4、Leader Partition自动平衡机制
5、Partition故障恢复机制
6、HW一致性保障-Epoch更新机制
内容更新中~