针对每个节点的操作,都会有一个监督者 watcher。
当监控的某个对象znode发生了变化,就会触发watcher事件
zk中的watch是一次性的,触发后立即销毁。
父节点,子节点增删改都能触发其watcher
针对不同类型的操作,触发的watcher事件也不同
1 节点创建事件
2 节点删除事件
3 节点数据变化事件

创建

创建父节点

  1. [zk: localhost:2181(CONNECTED) 59] stat /test watch
  2. Node does not exist: /test
  3. [zk: localhost:2181(CONNECTED) 60] create /test testd-data
  4. WATCHER::
  5. Created /test
  6. WatchedEvent state:SyncConnected type:NodeCreated path:/test

子节点创建

  1. [zk: localhost:2181(CONNECTED) 78] ls /test watch
  2. []
  3. [zk: localhost:2181(CONNECTED) 79] create /test/sub test
  4. WATCHER::Created /test/sub
  5. WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/tes

修改

修改父节点

  1. [zk: localhost:2181(CONNECTED) 64] get /test watch
  2. testd-data
  3. cZxid = 0x1d
  4. ctime = Wed May 08 19:06:40 CST 2019
  5. mZxid = 0x1d
  6. mtime = Wed May 08 19:06:40 CST 2019
  7. pZxid = 0x1d
  8. cversion = 0
  9. dataVersion = 0
  10. aclVersion = 0
  11. ephemeralOwner = 0x0
  12. dataLength = 10
  13. numChildren = 0
  14. [zk: localhost:2181(CONNECTED) 65] set /test newdata
  15. WATCHER::
  16. WatchedEvent state:SyncConnected type:NodeDataChanged path:/testcZxid = 0x1d
  17. ctime = Wed May 08 19:06:40 CST 2019
  18. mZxid = 0x1e
  19. mtime = Wed May 08 19:12:27 CST 2019
  20. pZxid = 0x1d
  21. cversion = 0
  22. dataVersion = 1
  23. aclVersion = 0
  24. ephemeralOwner = 0x0
  25. dataLength = 7
  26. numChildren = 0

修改子节点

依然触发的是NodeDataChanged事件

  1. [zk: localhost:2181(CONNECTED) 83] get /test/sub watch
  2. test
  3. cZxid = 0x26
  4. ctime = Wed May 08 19:30:32 CST 2019
  5. mZxid = 0x26
  6. mtime = Wed May 08 19:30:32 CST 2019
  7. pZxid = 0x26
  8. cversion = 0
  9. dataVersion = 0
  10. aclVersion = 0
  11. ephemeralOwner = 0x0
  12. dataLength = 4
  13. numChildren = 0
  14. [zk: localhost:2181(CONNECTED) 84] set /test/sub testdata
  15. WATCHER::
  16. WatchedEvent state:SyncConnected type:NodeDataChanged path:/test/subcZxid = 0x26
  17. ctime = Wed May 08 19:30:32 CST 2019
  18. mZxid = 0x27
  19. mtime = Wed May 08 19:30:54 CST 2019
  20. pZxid = 0x26
  21. cversion = 0
  22. dataVersion = 1
  23. aclVersion = 0
  24. ephemeralOwner = 0x0
  25. dataLength = 8
  26. numChildren = 0

删除

删除父节点

  1. [zk: localhost:2181(CONNECTED) 66] get /test watch
  2. newdata
  3. cZxid = 0x1d
  4. ctime = Wed May 08 19:06:40 CST 2019
  5. mZxid = 0x1e
  6. mtime = Wed May 08 19:12:27 CST 2019
  7. pZxid = 0x1d
  8. cversion = 0
  9. dataVersion = 1
  10. aclVersion = 0
  11. ephemeralOwner = 0x0
  12. dataLength = 7
  13. numChildren = 0
  14. [zk: localhost:2181(CONNECTED) 67] delete /test
  15. WATCHER::
  16. WatchedEvent state:SyncConnected type:NodeDeleted path:/test

删除子节点

  1. [zk: localhost:2181(CONNECTED) 80] ls /test watch
  2. [sub]
  3. [zk: localhost:2181(CONNECTED) 81] delete /test/sub
  4. [zk: localhost:2181(CONNECTED) 82]
  5. WATCHER::
  6. WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/test