ZooKeeper Watcher机制

Posted 在奋斗的大道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZooKeeper Watcher机制相关的知识,希望对你有一定的参考价值。

Watcher 机制

  • 针对每个节点的操作,都会有一个监督者 -> watcher

  • 当监控的某个对象(znode)发生了变化,则触发watcher事件

  • zk中的watch是一次性的,触发后立即销毁

  • 父节点,子节点 增删改都能够触发其watcher

  • 针对不同类型的操作,触发的watcher事件也不同:

    • 1.(子)节点创建事件

    • 2.(子)节点删除事件

    • 3.(子)节点数据变化事件

Watcher 事件

  • 通过get path [watch]设置 watcher

  • 父节点 增 删 改 操作触发 watcher

  • 子节点 增 删 改 操作触发watcher

 

Watcher 事件类型

父节点Watcher事件

  • 创建父节点触发:NodeCreated

  • 修改节点数据触发:NodeDatachanged

  • 删除节点数据触发:NodeDeleted

操作示例

# 连接zk
$ zkCli.sh -server 127.0.0.1:2181
# 对节点进行watch
$ stat /abc watch
# 创建父节点触发事件
$ create /abc 123
#结果
WARCHER::
WatchedEvent state:SyncConnected type:NodeCreated path:/abc


$ get /abc watch
# 修改节点数据触发
$ set /abc 567
#结果
WARCHER::
WatchedEvent state:SyncConnected type:NodeDatachanged path:/abc


$ create /hello 111
$ get /hello watch
$ delete /hello
#结果
WARCHER::
WatchedEvent state:SyncConnected type:NodeDeleted path:/hello

节点Watcher事件

  • ls为父节点设置watcher,创建子节点触发:NodeChildrenChanged

  • ls为父节点设置watcher,删除子节点触发:NodeChildrenChanged

  • ls为父节点设置watcher,修改子节点不触发事件

操作

$ ls /abc watch
# 创建子节点事件
$ create /abc/bcd 111
#结果
WARCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/abc
Create /abc/bcd


$ ls /abc watch
$ delete /abc/bcd
#结果
WARCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/abc

$ ls /abc watch
$ create /abc/xyz 111
$ set /abc/xyz 222
# 并没有触发watcher事件

set修改子节点并没有触发事件,你需要像父节点watch那样监控子节点

$ get /abc/xyz watch
$ set /abc/xyz 333
#结果
WARCHER::
WatchedEvent state:SyncConnected type:NodeDatachanged path:/abc/xyz

wather使用场景

  • 统一资源配置

以上是关于ZooKeeper Watcher机制的主要内容,如果未能解决你的问题,请参考以下文章

Apache ZooKeeper Watcher机制源码解释

Zookeeper源码分析之Watcher机制

品味ZooKeeper之Watcher机制_2

ZooKeeper Watcher机制

zookeeper学习-5Java API操作 - Watcher监听机制

大数据讲课笔记6.3 ZooKeeper两种重要机制