Zookeeper,在被修改的节点上监视所有其他读取的块吗?

时间:2017-09-29 18:19:57

标签: apache-zookeeper watch

我对ZooKeeper的理解是客户端总是从ITS的角度以有序的方式执行请求。

因此,如果客户1发布:

  • 写入节点A
  • 2读取节点A,B
  • 写入节点B. 他们将按此顺序执行。

但是如果客户端1在节点C上也有监视,并且客户端2写入该节点,那么在节点C上写入是否会影响/阻止来自客户端1的读取?

例如:

  • 客户1:开始看C
  • 客户端1:写入节点A
  • 客户端2:写入C
  • (客户端1:客户端1阻止,直到C的监视被触发?如果此时客户端1尝试写入节点C怎么办?)
  • 客户端1:3读取节点A,然后读取B,然后读取C
  • 客户端1:写入节点B

1 个答案:

答案 0 :(得分:0)

  

但是如果客户端1在节点C上也有手表,而客户端2则写   该节点,是否在节点C上进行写入会影响/阻止从客户端读取数据   1个

它没有阻止从client1读取,因为(检查here):

  

创建ZooKeeper对象时,还将创建两个线程:   IO线程和事件线程。所有IO发生在IO线程上   (使用Java NIO)。所有事件回调都在事件线程上发生。

影响 client1并以此顺序查看事件(检查here):

  

客户端将看到之前正在监视的znode的监视事件   查看与该znode对应的新数据。

下一个问题是:

  

客户端1是否阻塞,直到C的手表被解雇?

否(请参阅上面的说明)。

  

如果此时客户端1尝试写入节点C怎么办?

它将覆盖client2的写操作,因为它会根据您的项目符号顺序在之后发生(ZooKeeper is ordered;也请检查here,以了解ZooKeeper如何实现订购)。 / p>