zookeeper没有保证强一致性的证据

网络上有些人,非要说zookeeper是强一致,这个非常误导人,实际上zookeeper读写流程是不一样的。

这里批判一下尚学堂的这个视频,一个培训机构出的视频,都搞错了,会误导很多人的。(做技术的一定要严谨)当然尚学堂也提供了很多优秀的视频,我也白嫖了不少。但是错误还是要指出来的。

https://www.bilibili.com/video/BV1T5411N7n5?from=search&seid=5172813402562827196

下图是我在视频下方评论区指出来视频中错误的地方

zookeeper没有保证强一致性的证据

关于zookeeper的读写流程,可以看这篇文章,写的非常好。连接如下:

https://www.jianshu.com/p/5300f1f454e8

下面是官网给出的zookeeper不是强一致性的证据。在如下连接中搜索ZooKeeper can serve older data,翻译过来就是zookeeper有可能提供旧数据。

https://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html

zookeeper没有保证强一致性的证据

理解zookeeper的读写流程,其实非常好理解zookeeper读取旧数据(脏数据的)原理。假设我们zookeeper集群是3个节点。

zookeeper没有保证强一致性的证据

上图中2个线程,一个线程往zookeeper server集群中写name=3,zookeeper的leader讲leader节点和follower1节点写成功了之后,直接返回给zookeeper client1说数据已经写成功了。

这个时候zookeeper leader还没有来得及同步name=3到follower2,另外一个线程zookeeper client2来请求follower2,follower就返回了name为空给zookeeper client2.