【ZooKeeper】 --- ZK数据模型、节点类型、节点属性、watch机制


1 、ZK数据模型

ZooKeeper的视图结构和标准的Unix文件系统类似,其中每个节点称为“数据节点”或ZNode,每个znode可以存储数据,还可以挂载子节点,因此可以称之为“树”。
需要注意的是 创建znode时,每个znode都必须指定值,如果没有值,节点是不能创建成功的。

在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据 ; 且通过客户端可对znode进行增删改查的操作,还可以注册watcher监控znode的变化。 其数据模型可用下图进行表示:
在这里插入图片描述


2 、ZK节点类型

持久(persistent)节点:
(1) session断开后,数据不会丢失
(2)可以创建子节点
在这里插入图片描述
临时(ephemeral)节点:
(1)session断开后,数据会丢失
(2)不可以创建子节点
在这里插入图片描述
持久顺序(PERSISTENT_SEQUENTIAL)节点:
(1)、(2)同持久节点
在这里插入图片描述
(3)创建顺序节点时会默认设置顺序标识,即znode名称后会附加一个值 — 顺序号 ,顺序号是一个单调递增的计数器,由父节点维护
在这里插入图片描述
临时顺序(EPHEMERAL_SEQUENTIAL)节点: —> ZK实现分布式锁的基础。
(1)、(2)同临时节点,(3)同持久顺序节点


3 、ZK节点属性

在这里插入图片描述


4、 ZK watch机制

所谓watch机制,简单点理解就是某个客户端(watcher)可以对ZK中的Node进行监听(watch),当这个节点相关的数据发生变化时,ZK服务器会让监听这个节点的客户端(watcher)感知到它监听的节点具体发生了什么变化(触发客户端的监听事件)。

需要注意的是:原生客户端中ZK的watch 是一次性的,触发后立即销毁 —> 但 Apache Curator将其改造成了可以永久监听。

下图是可进行watch操作的命令:
在这里插入图片描述


4.1 NodeCreated — 监听的节点(还未创建)被创建时触发

在这里插入图片描述


4.2 NodeDataChanged — 监听节点的数据发生改变时触发

在这里插入图片描述
当然也可以用如下的方式(或者其他方式)进行监听:
在这里插入图片描述


4.3 NodeDeleted — 监听的节点被删除时触发

测试如下:
在这里插入图片描述


4.4 NodeChildrenChanged — 监听的节点创建、删除子节点时触发(ls、ls2命令)

测试如下:
在这里插入图片描述
总结:

  • Is/ls2为父节点设置watch ,创建子节点会触发 NodeChildrenChanged
  • Is/ls2为父节点设置watch ,删除子节点会触发 NodeChildrenChanged

但要格外注意:★★★★★

Is/ls2为父节点设置watch ,修改子节点不触发事件

验证如下:
在这里插入图片描述
由此可知,我们想监听子节点数据的变化,只能直接监听那个子节点,即
在这里插入图片描述


end

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值