- watch机制一
- 针对每个节点的操作,都会有一个监督者 -> watcher
- 当监控的某个对象(znode)发生了变化,则触发watch事件
- zk中的watch是一次性的,触发后立即销毁
- watch机制二
- 父结点,子节点 增删改都能触发其watch
- 针对不同类型的操作,触发的watch事件也不同
- (子)节点创建事件
- (子)结点删除事件
- (子)节点数据变化事件
- watch命令行
- 通过 get path [watch] 设置watch(具体得通过help查看当前版本所需的命令行)
- 父结点增删改操作触发watch
- 创建父结点触发:NodeCreated
- 首先查看当前所有节点,目前还没有“watchNode”节点,所以在stat watchNode节点的时候会先提示当前不存在此节点
- (由于目前使用的是3.7zk版本,所以添加watch事件会提示使用最新的方法进行添加,即 stat -w path)
- 但是也可以提前添加watch事件
- 接着调用create命令将 watchNode节点创建出来
- 则触发了WatchEvent事件,即NodeCreated事件。如上图最下方所示
- 修改父结点数据触发:NodeDataChanged
- 首先通过get -w path方法添加watch事件
- 接着修改watchNode的节点
- 触发NodeDataChanged事件
- 删除父结点触发:NodeDeleted
- 首先对该节点设置watch事件
- 接着进行删除,触发了NodeDeleted事件
- ls为父结点设置watch,创建子节点触发:NodeChildrenChanged
- 首先给watchNode通过-w 指令添加 watch事件
- 接着添加子节点
- 触发NodeChildrenChanged事件
- ls为父结点设置watch,删除子节点触发:NodeChildrenChanged
-
- 删除节点同样触发NodeChildrenChanged事件
- 删除节点跟创建子节点都触发了一样的事件,表示父结点只关心节点有没有变化,至于是删除还是创建,父结点是不做进一步处理的
- ls为父结点设置watch,修改子节点不触发事件:
-
- 首先我们先创建子节点childNode,然后赋值123
- 接着ls -w /watchNode 父结点watch事件
- 修改子节点 /childNode 的值 改为456,结果没发生任何的事件触发
- 所以zk给父结点设置watch事件,子节点进行修改是不进行任何事件触发的。
- 创建父结点触发:NodeCreated
- watch的使用场景
- 统一资源配置
- 例如zk集群由3台机子构成的,sqlConfig进行更新后,将里面的信息修改后,就会触发修改事件NodeDataChanged,用于更新客户端的配置。
- 当主机的sqlConfig节点的数据进行改变之后,其他主机的sqlConfig也会相应进行改变,它们各自也会触发各自客户端信息。
- 在实际中,可能有成千上百台服务器,手动进行修改的工作量是非常大的,并且不能保证统一修改正确,通过这种方式可以更快更准确的进行修改。
- 统一资源配置
zk特性-理解watch机制
最新推荐文章于 2024-05-21 14:37:47 发布