一、zNode节点属性
dataVersion 数据版本, 每次当 Znode 中的数据发生变化的时候, dataVersion
都会自增一下
cversion 节点版本, 每次当 Znode 的节点发生变化的时候, cversion 都会自增
aclVersion ACL(Access Control List) 的版本号, 当 Znode 的权限信息发生
变化的时候aclVersion会自增
zxid 事务ID
ctime 创建时间
mtime 最近一次更新的时间
ephemeralOwner 如果 Znode 为临时节点, ephemeralOwner 表示与该节点关联
的 SessionId
我们通过get 节点的目录,可以得到节点的属性
2|0二、watch机制
对zookeeper里的某个节点设置个监听,可以知道该节点是否进行了“增加”,“删除”,“修改”
Watcher 的特点
一次性触发 一个 Watcher 只会被触发一次, 如果需要继续监听, 则需要再次添加
Watcher
事件封装: Watcher 得到的事件是被封装过的, 包括三个内容 keeperState,
eventType, path
设置监听机制给/hello节点
另外再打开Hadoop101,修改/hello里的数据,看能否监听到
证明:可以监听到hello节点的数据改变了
3|0三、zookeeper的JAVAAPI操作
这里操作Zookeeper的JavaAPI使用的是一套zookeeper客户端框架 Curator ,解决了很多
Zookeeper客户端非常底层的细节开发工作 。
Curator包含了几个包:
curator-framework:对zookeeper的底层api的一些封装
curator-recipes:封装了一些高级特性,如:Cache事件监听、选举、分布式锁、分布式
计数器等
3|1创建maven工程,导入jar包
创建一个测试类,开始进行zookeeper的javaapi编程
节点操作
3|2①创建永久节点
运行后,进入linux查看,创建成功
3|3②创建临时节点
和创建永久节点的区别是:临时节点是:EPHEMERAL,而且要让他休眠几秒否则Linux看不到,因为是临时的,会话结束就会消失。
这样就看到了,不过等会话结束就没了
3|4③修改节点数据
使用的是:client.setData().forPath(节点路径,要更新的数据(记得转换成byte))
3|5④获取节点数据
用byte数组来获取client里的数据
然后转换成String输出
在打印处输出:
⑤设置节点的watch机制
通过监听hello3节点,对其进行创建,修改,删除
打印台输出: