kafka分布式存储
1.概述
之前提到过分布式存储,重点是要保持一致性,raft方案和paxos方案都是自己来完成这一切的,而kafka则主要依赖于zookeeper。
2.分布式存储的协调者
Controller,这个类的对象运行在一台机器上,首先通过zookeeper选出一台机器,
每一个broker都会在Controller path(/controller)上注册一个watch。当前controller失败时,对应的Controller path会自动消失(临时节点)。此时该watch被触发,所有活着的broker都会去竞选成为新的Controller(创建新的controller path),但是只有一个会竞选成功。竞选成功者成为新的leader。竞选失败则重新在新的Controller path上注册watch,因为zk的watch是一次性的,被触发一次之后即失效,所以需要重新注册。
Controller的管理方式
a、从zk中读取当前分区的所有ISR(in-sync-replicas)集合
b、调用配置的分区算法选择分区的leader
kafka选择分区算法:
1)、NoOpLeaderSelector–偏爱分区(SR中的第一个),并将leader发送给为此做出改变的broker,
2)、offlinePartitionLeader–也是选择偏爱分区作为leader
3)、reassignedPartitionLeader
4)、preferredReplicaPartitionLeader
5)、ControlledShutdownLeader
上面五中算法都使用偏爱分区作为leader,区别是选择leader之后所做的操作不同。