码上敲享录 > ZooKeeper面试题 > Zookeeper 对节点的 watch 监听通知是永久的吗?为什么不是永久的?

Zookeeper 对节点的 watch 监听通知是永久的吗?为什么不是永久的?

上一章章节目录下一章 2023-07-16已有301人阅读 评论(0)

ZooKeeper 中的 Watch 监听通知并不是永久的,而是一次性的。当客户端在某个 ZooKeeper 节点上设置了一个 Watch,它会在对应节点的数据发生变化、节点被删除、子节点发生变化等情况下触发通知,然后该 Watch 就会被移除,不再接收后续的通知。


这样设计的主要原因有几点:


1. 减轻负载:如果 Watch 是永久的,那么每个 Watch 都要持续保持与 ZooKeeper 服务器的连接,等待可能的事件。这将导致额外的网络消息和服务器负载,对 ZooKeeper 集群造成不必要的压力。通过一次性的 Watch,可以减轻服务器的负载。


2. 避免死锁和数据不一致:如果 Watch 是永久的,并且客户端长期阻塞等待通知,在一些特定情况下可能导致死锁或数据不一致的问题。比如,如果一个 Watch 触发的回调处理事件较慢,而另一个 Watch 又在同一个节点上等待通知,就可能导致阻塞和资源争用。


3. 简化客户端逻辑:一次性的 Watch 简化了客户端的逻辑处理。客户端只需要处理一次通知事件,然后根据需要再次设置 Watch。这种设计方式更容易理解和管理。


因此,ZooKeeper 中的 Watch 监听通知是一次性的,而非永久的。当客户端收到通知后,需要重新设置 Watch 来继续监视节点的变化。这样能够平衡负载、避免问题,并简化客户端的开发和管理。


0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交