一.ZooKeeper集群支持动态添加机器吗?
ZooKeeper集群支持动态添加机器,这实际上是一种水平扩容的方式。ZooKeeper从3.5版本开始支持动态扩容。
动态添加机器有两种主要方式:全部重启和逐个重启。全部重启需要关闭所有ZooKeeper服务,修改配置之后重新启动,这种方式不会影响之前客户端的会话。而逐个重启则是在过半存活即可用的原则下,一台机器重启不会影响整个集群对外提供服务,这是比较常用的方式。
在添加新机器时,需要在新机器上安装ZooKeeper,并确保非集群相关的配置与之前的集群机器相一致。然后,可以通过ZooKeeper提供的工具或API进行动态添加操作。
二.ZooKeeper对节点的watch监听通知是永久的吗?为什么不是永久的?
ZooKeeper对节点的watch监听通知不是永久的。
这种设计主要是出于以下几个方面的考虑:
- 一次性触发:Watch机制的主要目标是提供事件的即时通知。一旦某个watch被触发(例如,当节点数据改变或节点被删除时),ZooKeeper会发送通知给相应的客户端,并立即移除该watch。这样做可以确保每个watch只处理一次事件,避免了重复处理相同事件所带来的复杂性。
- 避免资源泄漏:如果watch是永久性的,那么在节点频繁变化的情况下,可能会导致大量的watch积压,进而消耗大量的系统资源。一次性的watch机制可以避免这种情况的发生,因为它在通知客户端之后会自动被移除。
- 实现简单性:一次性的watch机制使得ZooKeeper的实现和维护更加简单。系统不需要持续追踪和管理各个节点的监听状态,这有助于提高系统的可靠性和性能。
在实际应用中,很多时候客户端并不需要知道服务端的每一次变动,而只需要获取最新的数据即可。因此,ZooKeeper的这种设计更符合实际的应用需求。
如果需要持续监听节点的变化,客户端可以在接收到watch事件通知后,再次对节点设置watch,从而实现类似永久监听的效果。但需要注意的是,这种方式仍然依赖于每次事件触发后的重新设置,而不是真正的永久监听。
三.Zoo