Zookeeper-监听器原理

350 阅读2分钟

1.监听器原理

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、节点删除、子目 录节点增加删除)时,ZooKeeper 会通知客户端。监听机制保证 ZooKeeper 保存的任何的数 据的任何改变都能快速的响应到监听了该节点的应用程序。

50424c8968d72531d2b72f0de07c6c9.png 1)节点的值变化监听

(1)在 hadoop104 主机上注册监听/sanguo 节点数据变化

[zk: localhost:2181(CONNECTED) 26] get -w /sanguo

(2)在 hadoop103 主机上修改/sanguo 节点的数据

[zk: localhost:2181(CONNECTED) 1] set /sanguo "xisi"

(3)观察 hadoop104 主机收到数据变化的监听

WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/sanguo

注意:在hadoop103再多次修改/sanguo的值,hadoop104上不会再收到监听。因为注册 一次,只能监听一次。想再次监听,需要再次注册。

2)节点的子节点变化监听(路径变化)

(1)在 hadoop104 主机上注册监听/sanguo 节点的子节点变化

[zk: localhost:2181(CONNECTED) 1] ls -w /sanguo [shuguo, weiguo] 

(2)在 hadoop103 主机/sanguo 节点上创建子节点

[zk: localhost:2181(CONNECTED) 2] create /sanguo/jin "simayi" Created /sanguo/jin 

(3)观察 hadoop104 主机收到子节点变化的监听

WATCHER:: WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/sanguo 

注意:节点的路径变化,也是注册一次,生效一次。想多次生效,就需要多次注册。

2.节点删除与查看

1)删除节点

[zk: localhost:2181(CONNECTED) 4] delete /sanguo/jin 

2)递归删除节点

[zk: localhost:2181(CONNECTED) 15] deleteall /sanguo/shuguo 

3)查看节点状态

[zk: localhost:2181(CONNECTED) 17] stat /sanguo 
cZxid = 0x100000003 
ctime = Wed Aug 29 00:03:23 CST 2018 
mZxid = 0x100000011 
mtime = Wed Aug 29 00:21:23 CST 2018 
pZxid = 0x100000014 
cversion = 9 
dataVersion = 1 
aclVersion = 0 
ephemeralOwner = 0x0 
dataLength = 4 
numChildren = 1