zookeeper客户端相关

本文介绍了Zookeeper的客户端命令,包括不同类型的节点创建、版本控制以及权限管理。客户端如ZkClient和Curator提供了更高级别的API,支持递归操作和场景封装。Zookeeper的节点具备版本概念,实现类似CAS的更新机制,并使用Watcher进行事件通知。ZNode构成层次化的树形结构,每个节点可设置数据和子节点。此外,文章提到了会话管理,包括会话断开后的重连机制和临时节点的处理。
摘要由CSDN通过智能技术生成

zk的客户端命令:

  1. create [-s] [-e] path data acl:-s代表顺序节点,-e代表临时节点,什么都不加则是持久节点。
  2. ls path [watch]:[watch]代表是否需要监控。
  3. get path [watch]:[watch]代表是否需要监控。
  4. set path data [version]:[version]代表版本,节点是有版本的概念的,基于哪个版本进行数据更新。
  5. delete path [version]:基于哪个版本进行节点删除。

删除节点接口的权限控制比较特殊,当客户端对一个数据节点添加了权限信息后,对于删除操作来说,其作用范围是其子节点,也就是说,当我们对一个数据节点添加权限信息后,依然可以自由地删除这个节点,但是对于这个节点的子节点,就必须使用相应的权限信息才能够删除掉它。

<dependency>
		<groupId>com.github.sgroschupf</groupId>
		<artifactId>zkclient</artifactId>
		<version>0.1</version>
</dependency>

zkclient是将原生ZK的api进行封装,剔除了Watcher,使用Listener。而且Listener一次注册一直有效,Watcher需要反复注册。zkclient支持递归的操作,原生的api不支持递归操作。

<dependency>
		<groupId>org.apache.curator</groupId>
		<artifactId>curator-framework</artifactId>
		<version>2.4.2</version>
</dependency>

curator是另一个zk客户端,支持递归,同时它提供了fluent风格的api。此外,Curator中还提供了ZK各种应用场景(Recipe,如共享锁服务,master选举机制和分布式计数器等)的抽象封装。

ZK中的节点有版本的概念,可以基于版本进行数据的更新,节点的删除等,类似于CAS,传入一个版本号,看现在的真实版本是否和其一致,如果一致进行操作,不一致不操作。

临时节点不能创建子节点。

ZK的发布/订阅采用的是推和拉相结合的模式:客户端向服务端注册自己需要关注的节点,一旦该节点的数据发生变化,那么服务端就会向相应的客户端发送Watcher事件通知,客户端接收到这个消息通知以后,需要主动到服务端获取最新的数据。

ZK中,每个数据节点称为一个ZNode,所有ZNode按层次化结构进行组织,形成一棵树,ZNode的节点路径标识方式和Unix文件系统路径非常相似,都是由一系列使用斜杠(/)进行分割的路径表示,可以向节点中写入数据,也可以在节点下面创建子节点。

在这里插入图片描述
乐观锁控制的事务分成如下三个阶段:数据读取写入校验数据写入。比如CAS校验是否是预期值,Zookeeper中的version。

在这里插入图片描述

Zookeeper服务器在生成WatchedEvent事件之后,会调用getWrapper方法将事件包装成一个可序列化的WatcherEvent
事件,这里明显使用了装饰器模式。

CONNECTION_LOSS是指客户端和服务端因为网络等原因断开连接,断开连接之后客户端会进行连接重试,如果重连成功,那服务端的session不更换,之前的Watcher和临时节点也都存在;如果在会话超时时间过后还没有连接成功,则SESSION_EXPIRED,服务端会清理session,watcher以及临时节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值