zookeeper是如何保证集群之间的数据一致性的

本文深入探讨ZooKeeper的leader-follower机制下的一致性和数据同步原理,解释了广播队列如何确保消息顺序,以及在集群崩溃时的投票机制。揭示了ZooKeeper如何在保证顺序一致性的前提下,应对脏读和数据不一致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

zk是 leader -follower机制,所有的写操作是leader广播通知到所有follower,有一半确认即可。那么广播肯定是不可靠的,万一有的follower没有操作本地数据,所有打到这台follower的请求读到的不是脏数据了吗?

1、zk保证的是顺序一致性,短时间是会有脏读的产生。leader会为每一个follower创建一个广播队列,保证消息的顺序性。folower端:在下一个消息到来时,必已经顺序操作之前的消息了。

2、如果一个客户端将Znode z的值更新为a,在之后的操作中,它又将z的值更新为b,则没有客户端能够在看到z的值是b之后再看到值a;因为客户端也会保存一个它见过的最大的 zxid,如果读取的时候,如果客户端发现 本地 zxid 比 server 端的最大 zxid 大,则拒绝,client 会自动重连到其他server。所以client可能会读到脏数据,但不会读到实时数据后,还会再读到脏数据。

3、如果是广播同步数据的过程中,集群崩溃了。集群会进入投票状态,会通过投票机制选出一个commit最高(数据最新)的zk节点,然后其他follower 都会同步数据到最高commit(数据最新)。

 

zk基础看这里:  https://blog.youkuaiyun.com/wypblog/article/details/103268246

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值