zookeeper是如何保证数据一致性的?

Zookeeper的读一致性依赖于client和server的合作,通过zxid确保数据新鲜性。sync操作不能保证立即读取最新数据,特别是在选举期间。Zookeeper正在改进同步要求,使之需要quorum来避免问题。
摘要由CSDN通过智能技术生成

1、客户端的读一致保证:

        zookeeper 的读写一致不是在 server 做的,而是 server & client 配合的;client 会记录它见过的最大的 zxid (在你的场景下,就是这条写入 的 zkid),读取的时候,如果 server 发现 这条 zxid 比 server 端的最大 zxid 大,则拒绝,client 会自动重连到其他server(还在同一个 session) —— 最终会落到有新数据的 server 上,因为半数已经同意;

例如:如果client先从当前连接的server1读取到了最新的数据,然后断开当前server1连接到另一台server2,此时server2同样可能是旧数据,这也是通过client记录最大zxid,来解决读取到的值回退的问题,会断开,连server3.. 直到连到zxid更大的服务器。

2、sync后再读也不能保证读到新的. 因为sync之前如果刚好发生了选举,自己又连到老的leader上,老的leader还没有过期, 而sync目前又不要求quorum, 这种情况老leader就可能漏掉其他节点(新leader所在集群的)在sync之前发出的写请求. 不过ZK正在修复这点,会把sync改成要求quorum的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值