zookeeper

本文涉及的产品
云原生网关 MSE Higress,422元/月
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: ZNodeZNode是ZK树形结构的一个节点,它可以包含或者不包含数据。ZK提供了如下API,用于操作ZNode。create path datadelete path dataexists pathgetdata pathputdata path datagetChildren pathZK客户端通过建立一个Session会话,来连接ZK服务,通过这些API来操作ZNode。

ZNode

ZNode是ZK树形结构的一个节点,它可以包含或者不包含数据。

ZK提供了如下API,用于操作ZNode。

  • create path data
  • delete path data
  • exists path
  • getdata path
  • putdata path data
  • getChildren path
    ZK客户端通过建立一个Session会话,来连接ZK服务,通过这些API来操作ZNode。

ZNode模式

  • PERSISTENT-持久化节点:创建这个节点的客户端在与zookeeper服务的连接断开后,这个节点也不会被删除(除非您使用API强制删除)。
  • PERSISTENT_SEQUENTIAL-持久化顺序编号节点:当客户端请求创建这个节点A后,zookeeper会根据parent-znode的zxid状态,为这个A节点编写一个全目录唯一的编号(这个编号只会一直增长)。当客户端与zookeeper服务的连接断开后,这个节点也不会被删除。
  • EPHEMERAL-临时znode节点:创建这个节点的客户端在与zookeeper服务的连接断开后,这个节点就会被删除。ephemeral模式可以用于检测master或者worker是否挂掉。ephemeral模式的节点也可以被主动删除。
  • EPHEMERAL_SEQUENTIAL-临时顺序编号znode节点:当客户端请求创建这个节点A后,zookeeper会根据parent-znode的zxid状态,为这个A节点编写一个全目录唯一的编号(这个编号只会一直增长)。当创建这个节点的客户端与zookeeper服务的连接断开后,这个节点被删除

zNode的结构

节点的属性

每个znode都包含了一系列的属性,通过命令get,我们可以获得节点的属性。

get /module1/app2 
app2 
cZxid = 0x20000000e 
ctime = Thu Jun 30 20:41:55 HKT 2016 
mZxid = 0x20000000e 
mtime = Thu Jun 30 20:41:55 HKT 2016 
pZxid = 0x20000000e 
cversion = 0 
dataVersion = 0 
aclVersion = 0 
ephemeralOwner = 0x0 
dataLength = 4 
numChildren = 0

版本号

对于每个znode来说,均存在三个版本号:

  • dataVersion :数据版本号,每次对节点进行set操作,dataVersion的值都会增加1(即使设置的是相同的数据)。
  • cversion :子节点的版本号。当znode的子节点有变化时,cversion 的值就会增加1。
  • aclVersion ACL的版本号

以数据版本号来说明ZooKeeper中版本号的作用。每一个znode都有一个数据版本号,它随着每次数据变化而自增。ZooKeeper提供的一些API例如setData和delete根据版本号有条件地执行。多个客户端对同一个znode进行操作时,版本号的使用就会显得尤为重要。例如,假设客户端C1对znode /config写入一些配置信息,如果另一个客户端C2同时更新了这个znode,此时C1的版本号已经过期,C1调用setData一定不会成功。这正是版本机制有效避免了数据更新时出现的先后顺序问题。在这个例子中,C1在写入数据时使用的版本号无法匹配,使得操作失败。图2描述了这个情况。
20180807104346923

事务ID

对于ZooKeeper来说,每次的变化都会产生一个唯一的事务id,zxid(ZooKeeper Transaction Id)。通过zxid,可以确定更新操作的先后顺序。例如,如果zxid1小于zxid2,说明zxid1操作先于zxid2发生。
需要指出的是,zxid对于整个ZooKeeper都是唯一的,即使操作的是不同的znode。

cZxid :Znode创建的事务id。

mZxid :Znode被修改的事务id,即每次对znode的修改都会更新mZxid。

20180807104522349
在集群模式下,客户端有多个服务器可以连接,当尝试连接到一个不同的服务器时,这个服务器的状态要与最后连接的服务器的状态要保持一致。ZooKeeper正是使用zxid来标识这个状态,图3描述了客户端在重连情况下zxid的作用。当客户端因超时与S1断开连接后,客户端开始尝试连接S2,但S2延迟于客户端所识别的状态。然而,S3的状态与客户端所识别的状态一致,所以客户端可以安全连接上S3

WatchedEvent

WatchedEvent代表watcher到的事件,它包含发生了什么事件,ZooKeeper的当前连接状态以及产生事件的ZNode路径。

  • KeeperState
  • EventType
  • path

KeeperState

  • Disconnected
  • SyncConnected
  • AuthFailed
  • ConnectedReadOnly
  • SaslAuthenticated
  • Expired
  • Unknown(已废弃)
  • NoSyncConnected(已废弃)

EventType

EventType包含五种状态:

  • None
  • NodeCreated
  • NodeDeleted
  • NodeDataChanged
  • NodeChildrenChanged
    其中后四种用于表示ZNode的状态或者数据变更,而None则用于会话的状态变更
相关文章
|
Java Spring 容器
如何解决spring EL注解@Value获取值为null的问题
本文探讨了在使用Spring框架时,如何避免`@Value("${xxx.xxx}")`注解导致值为null的问题。通过具体示例分析了几种常见错误场景,包括类未交给Spring管理、字段被`static`或`final`修饰以及通过`new`而非依赖注入创建对象等,提出了相应的解决方案,并强调了理解框架原理的重要性。
780 5
|
2月前
|
机器学习/深度学习 算法 数据可视化
从另一个视角看Transformer:注意力机制就是可微分的k-NN算法
注意力机制可理解为一种“软k-NN”:查询向量通过缩放点积计算与各键的相似度,softmax归一化为权重,对值向量加权平均。1/√d缩放防止高维饱和,掩码控制信息流动(如因果、填充)。不同相似度函数(点积、余弦、RBF)对应不同归纳偏置,多头则在多个子空间并行该过程。
306 6
|
存储 运维 Cloud Native
The Snowflake Elastic Data WareHouse 论文解读
Snowflake是目前话题度超高的云原生数仓产品,从20年下半年上市到现在已经市值千亿了。它的流行进一步印证了云的重要性。纵观现在大大小小的数据库厂商,上云是必然要走的战略步骤,而snowflake则更加直接,类似于AWS Aurora或我们的PolarDB,它就是围绕着云基础设施构建的OLAP数据库产品。
1696 0
The Snowflake Elastic Data WareHouse 论文解读
|
监控 Dubbo Java
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
这篇文章详细介绍了如何将Spring Boot与Dubbo和Zookeeper整合,并通过Dubbo管理界面监控服务注册情况。
947 0
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
|
消息中间件 Kafka Shell
Connection to node 0 (/172.17.0.8:9092) could not be established. Broker may not be available. 是什么问题?
Connection to node 0 (/172.17.0.8:9092) could not be established. Broker may not be available. 是什么问题?
1337 9
|
缓存 Linux API
如何使用Matplotlib绘制出美观实用的图形?
如何使用Matplotlib绘制出美观实用的图形?
222 2
|
SQL Oracle 关系型数据库
记录:java.sql.SQLException: ORA-00911: 无效字符...【亲测有效】
记录:java.sql.SQLException: ORA-00911: 无效字符...【亲测有效】
645 0
|
算法 NoSQL Java
实战-全局唯一邀请码功能实现
实战-全局唯一邀请码功能实现
1878 0
|
Java Spring
《SpringBoot系列四》:@Value注解从配置文件中读取数组/集合(@Value设置默认值)
《SpringBoot系列四》:@Value注解从配置文件中读取数组/集合(@Value设置默认值)
3511 0
《SpringBoot系列四》:@Value注解从配置文件中读取数组/集合(@Value设置默认值)
|
网络协议 网络虚拟化 数据安全/隐私保护
eNSP常用命令 华为模拟器eNSP常用命令
路由器常用命令:进入任务视图给路由器取名,进入指定接口,给当前路由器接口配置IP地址和子网掩码,退出接口或系统视图,启用DHCP,指定该接口拥有DHCP功能,指定DNS服务器的IP地址,显示全部ip的路由表,显示指定ip路由表,添加静态路由。交换机常用命令:交换机改变语言模式,创建vlan,查看所有vlan,将接口拆分为多个子接口,指定接口与哪个vlan关联,启用arp广播,将接口修改为access接口,将接口修改为trunk接口,将接口划分到指定vlan里,查看开启stp后的交换机接口的接口情况,查看交换
1699 0
eNSP常用命令 华为模拟器eNSP常用命令