zookeeper中的ZAB协议
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`
ZooKeeper中的ZAB协议
ZooKeeper是一个分布式服务框架,主要用于解决分布式应用中的数据一致性问题。在ZooKeeper中,为了确保集群中的数据副本之间可以可靠地进行状态同步,采用了一种称作ZAB(ZooKeeper Atomic Broadcast) 协议。
ZAB协议介绍
ZAB协议是为分布式协调服务ZooKeeper专门设计的一种原子广播协议。它能够保证集群中所有副本之间数据的一致性,保证了客户端对ZooKeeper服务的每个修改操作都是原子的,有序的,且最终一致的。
ZAB协议的工作原理
ZAB协议主要包括两大部分:崩溃恢复和消息广播。
崩溃恢复
当ZooKeeper集群启动或Leader节点出现故障后重新选举出新的Leader时,ZAB协议会进入崩溃恢复模式。
在此模式下,新的Leader会和Follower进行数据同步。Leader只有在绝大多数Follower都与其数据状态一致之后,集群才会重新开始对外服务。
这个过程确保了即使在发生故障的情况下,集群数据也不会丢失,并且保持一致。
消息广播
在崩溃恢复过程完成后,ZAB协议进入消息广播模式。
当客户端发送一个修改请求到Leader,Leader生成一个对应的提案并分配一个全局唯一的ID,然后将这个提案发送给所有Follower。
Follower收到提案后,将提案记录到磁盘并回复给Leader一个ACK。
当Leader收到多数Follower的ACK后,它将发送一个提交消息给所有Follower,然后这个操作才会被提交并对所有客户端可见。
ZAB协议的特点
强一致性:所有ZooKeeper的修改操作都是按照先后顺序执行,确保数据的一致性。
高可用性:通过Leader选举和数据同步机制,即使在部分节点崩溃的情况下依然能够提供服务。
顺序保证:每个更新都有一个全局唯一的ID(zxid),确保所有操作都是有序的。
容错性:只要超过半数的节点正常工作,整个ZooKeeper系统就能正常服务。
总的来说,ZAB协议是ZooKeeper实现高效、可靠数据同步的核心机制,保证了ZooKeeper作为一个分布式协调服务的鲁棒性与效率。
最后更新于