ZAB,即ZooKeeper Atomic Broadcast(ZooKeeper原子广播协议),是ZooKeeper中用于保证数据一致性和顺序性的核心协议。ZAB协议定义了ZooKeeper集群中的节点如何进行通信和达成一致,以确保在分布式环境中数据的准确性和可靠性。以下是ZAB协议的一些关键特性:
1. **角色定义**:
- **Leader**:负责处理所有的事务请求(写请求),并广播给Follower和Observer。
- **Follower**:接收Leader的广播消息,并在本地应用这些变更。
- **Observer**(3.3.0版本引入):与Follower类似,但不参与投票过程,主要用于扩展系统读能力。
2. **消息广播**:Leader负责将客户端的写请求转换为事务Proposal,并广播给所有Follower和Observer。
3. **一致性**:ZAB协议保证了所有事务的全局顺序性,确保了集群中的数据一致性。
4. **故障容错**:如果Leader发生故障,ZAB协议通过选举机制确保新的Leader能够被选举出来,继续处理事务。
5. **数据同步**:在Leader选举过程中,Follower可能会落后于Leader的数据状态。一旦新的Leader被选举出来,它会同步Follower的数据,以确保所有节点的数据一致性。
6. **状态同步**:ZAB协议定义了两种状态同步机制:
- **SNAPSHOT**:Leader会定期生成数据的快照,以便在故障恢复时快速同步状态。
- **DIFF**:Leader会记录事务日志的差异,用于同步落后的Follower。
7. **事务ID(ZXID)**:每个事务Proposal都会被分配一个唯一的ZXID,用于标识事务的顺序。
8. **选举机制**:ZAB协议定义了Leader选举的过程,包括投票和选举条件。
9. **广播和确认**:Leader在广播事务Proposal后,需要等待Follower的确认。只有当超过半数的Follower确认后,事务才会被提交。
10. **数据版本控制**:ZAB协议通过版本号来控制Znode的数据版本,确保更新操作的正确性。
ZAB协议是ZooKeeper高可用性和数据一致性的关键,它通过Leader和Follower之间的紧密协作,以及Observer的扩展读能力,为分布式系统提供了一个强大的协调服务。