Zookeeper 节点 znode

zookeeper znode(节点),有一些独特的属性。znode 的特性使 zookeeper 可以开发出不同的场景应用。

 

1. 同一级节点 key 名称是唯一的

实例:

$ ls /
$ create /codebaoku 2

已存在 /codebaoku 节点,再次创建会提示已经存在。

 

2. 创建节点时,必须要带上全路径

实例:

$ ls /codebaoku
$ create /codebaoku/child 0
$ create /codebaoku/child/ch01 0

 

3. session 关闭,临时节点清除

实例:

$ ls /codebaoku
$ create -e /codebaoku/echild 0

同时终端二查看该节点:

$ ls /codebaoku

ctrl+c 关闭终端一连接后,查询终端二 /codebaoku/echild 节点消失。

$ ls /codebaoku

 

4. 自动创建顺序节点

实例:

$ create -s -e /codebaoku 0

 

5. watch 机制,监听节点变化

事件监听机制类似于观察者模式,watch 流程是客户端向服务端某个节点路径上注册一个 watcher,同时客户端也会存储特定的 watcher,当节点数据或子节点发生变化时,服务端通知客户端,客户端进行回调处理。特别注意:监听事件被单次触发后,事件就失效了。

提示:参考常用命令章节 get 命令监听 watch 使用,后面章节将详细介绍 watch 实现原理。

 

6. delete 命令只能一层一层删除

实例:

$ ls /
$ delete /codebaoku

提示:新版本可以通过 deleteall 命令递归删除。

 

7. 应用场景

有了上述众多节点特性,使得 zookeeper 能开发不出不同的经典应用场景,比如:

  • 1. 数据发布/订阅
  • 2. 负载均衡
  • 3. 分布式协调/通知
  • 4. 集群管理
  • 5. 集群管理
  • 6. master 管理
  • 7. 分布式锁
  • 8. 分布式队列

zookeeper 的 ACL(Access Control List,访问控制表)权限在实际应用中非常重要。ACL 权限可以针对节点设置相关读写等权限,保障数据安全性。permissions 可以指定不同的权限范围及角色1. ACL 命令行:getAcl 命令:获取某个节点的 acl 权限信息。setAcl 命令:设置某个节点的 acl 权限信息。