2019年面试官最喜欢问的28道ZooKeeper面试题( 十 )

(4)watcher event 异步发送 watcher 的通知事件从 server 发送到 client 是异步的 , 这就存在一个问题 , 不同的客户端和服务器之间通过 socket 进行通信 , 由于网络延迟或其他因素导致客户端在不通的时刻监听到事件 , 由于 Zookeeper 本身提供了 ordering guarantee , 即客户端监听事件后 , 才会感知它所监视 znode发生了变化 。 所以我们使用 Zookeeper 不能期望能够监控到节点每次的变化 。 Zookeeper 只能保证最终的一致性 , 而无法保证强一致性 。

(5)注册 watcher getData、exists、getChildren

(6)触发 watcher create、delete、setData

(7)当一个客户端连接到一个新的服务器上时 , watch 将会被以任意会话事件触发 。 当与一个服务器失去连接的时候 , 是无法接收到 watch 的 。 而当 client 重新连接时 , 如果需要的话 , 所有先前注册过的 watch , 都会被重新注册 。 通常这是完全透明的 。 只有在一个特殊情况下 , watch 可能会丢失:对于一个未创建的 znode的 exist watch , 如果在客户端断开连接期间被创建了 , 并且随后在客户端连接上之前又删除了 , 这种情况下 , 这个 watch 事件可能会被丢失 。

推荐阅读