|NO.Z.00003|——————————|BigDataEnd|——|Hadoop&Zookeeper.V03|——|Zookeeper.v03|数据结构|ZNode类型|Watcher机制|

一、Zookeeper数据结构与监听机制
~~~     [Zookeepe数据结构与监听之ZNode类型]
~~~     [Zookeepe数据结构与监听之ZNode状态信息]
~~~     [Zookeepe数据结构与监听之Watcher机制] 
### --- ZooKeeper数据模型Znode

~~~     在ZooKeeper中,数据信息被保存在一个数据节点上,这些节点被称为znode。
~~~     ZNode 是Zookeeper 中最小数据单位,在 ZNode 下面又可以再挂 ZNode,
~~~     这样一层下去就形成了一个层次化命名空间 ZNode 树,我们称为 ZNode Tree,
~~~     它采用了类似文件系统的层级树状结构进行管理。见下图示例:
~~~     # 在 Zookeeper 中,每一个数据节点都是一个 ZNode,
~~~     上图根目录下有两个节点分别是:app1 和app2,其中 app1 下面又有三个子节点,
~~~     所有ZNode按层次化进行组织,形成这么一颗树,
~~~     ZNode的节点路径标识方式和Unix文件系统路径非常相似,
~~~     都是由一系列使用斜杠(/)进行分割的路径表示,
~~~     开发人员可以向这个节点写入数据,也可以在这个节点下面创建子节点。
二、ZNode 的类型
### --- ZNode的类型

~~~     刚刚已经了解到,Zookeeper的znode tree是由一系列数据节点组成的,
~~~     那接下来,我们就对数据节点做详细讲解
### --- Zookeeper 节点类型可以分为三大类:

~~~     持久性节点(Persistent)
~~~     临时性节点(Ephemeral)
~~~     顺序性节点(Sequential)
### --- 在开发中在创建节点的时候通过组合可以生成以下四种节点类型:

~~~     持久节点、持久顺序节点、临时节点、临时顺序节点。
~~~     不同类型的节点则会有不同的生命周期
~~~     # 持久节点:
~~~     是Zookeeper中最常见的一种节点类型,所谓持久节点,
~~~     就是指节点被创建后会一直存在服务器,直到删除操作主动清除

~~~     # 持久顺序节点:
~~~     就是有顺序的持久节点,节点特性和持久节点是一样的,只是额外特性表现在顺序上。
~~~     顺序特性实质是在创建节点的时候,会在节点名后面加上一个数字后缀,来表示其顺序。
~~~     # 临时节点:
~~~     就是会被自动清理掉的节点,它的生命周期和客户端会话绑在一起,客户端会话结束,
~~~     节点会被删除掉。与持久性节点不同的是,临时节点不能创建子节点。

~~~     # 临时顺序节点:
~~~     就是有顺序的临时节点和持久顺序节点相同在其创建的时候会在名字后面加上数字后缀。
### --- 事务ID

~~~     # 首先了解,事务是对物理和抽象的应用状态上的操作集合。
~~~     往往在现在的概念中,狭义上的事务通常指的是数据库事务,
~~~     一般包含了一系列对数据库有序的读写操作,这些数据库事务具有所谓的ACID特性,即原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
~~~     # 而在ZooKeeper中,事务是指能够改变ZooKeeper服务器状态的操作,
~~~     我们也称之为事务操作或更新操作作,一般包括数据节点创建与删除、数据节点内容更新等操作。
~~~     对于每一个事务请求,ZooKeeper都会为其分配一个全局唯一的事务ID用 ZXID 来表示,
~~~     通常是一个 64 位的数字。每一个 ZXID 对应一次更新操作,
~~~     从这些ZXID中可以间接地识别出ZooKeeper处理这些更新操作请求的全局顺序
~~~     zk中的事务指的是对zk服务器状态改变的操作(create,update data)更新字节点)
~~~     zk对这些事务操作都会编号,这个编号是自增长的被称为ZXID。
三、ZNode 的状态信息
### --- 使用bin/zkCli.sh 连接到zk集群

[root@linux121 bin]# pwd
/opt/yanqi/servers/zookeeper-3.4.14/bin

[zk: localhost:2181(CONNECTED) 0] get /zookeeper
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
~~~     # 整个 ZNode 节点内容包括两部分:节点数据内容和节点状态信息。
~~~     数据内容是空,其他的属于状态信息。那么这些状态信息都有什么含义呢?

cZxid           就是 Create ZXID,                         表示节点被创建时的事务ID。
ctime           就是 Create Time,                         表示节点创建时间。
mZxid           就是 Modified ZXID,                       表示节点最后一次被修改时的事务ID。
mtime           就是 Modified Time,                       表示节点最后一次被修改的时间。
pZxid           表示该节点的子节点列表最后一次被修改时的事务 ID。只有子节点列表变更才会更新 pZxid,子节点内容变更不会更新。
cversion        表示子节点的版本号。
dataVersion     表示内容版本号。
aclVersion      标识acl版本
ephemeralOwner  表示创建该临时节点时的会话 sessionID,        如果是持久性节点那么值为 0
dataLength      表示数据长度。
numChildren     表示直系子节点数。
四、Watcher 机制
### --- Watcher机制

~~~     # Zookeeper使用Watcher机制实现分布式数据的发布/订阅功能;
~~~     一个典型的发布/订阅模型系统定义了一种 一对多的订阅关系,
~~~     能够让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态变化时,
~~~     会通知所有订阅者,使它们能够做出相应的处理。
~~~     在 ZooKeeper 中,引入了 Watcher 机制来实现这种分布式的通知功能。
~~~     # ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,
~~~     当服务端的一些指定事件触发了这个 Watcher,
~~~     那么Zk就会向指定客户端发送一个事件通知来实现分布式的通知功能。
### --- 整个Watcher注册与通知过程如图所示。

~~~     Zookeeper的Watcher机制主要包括客户端线程、客户端WatcherManager、Zookeeper服务器三部分。
### --- 具体工作流程为:

~~~     客户端在向Zookeeper服务器注册的同时,会将Watcher对象存储在客户端的WatcherManager当中
~~~     当Zookeeper服务器触发Watcher事件后,会向客户端发送通知
~~~     客户端线程从WatcherManager中取出对应的Watcher对象来执行回调逻辑

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(10)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示