4. ZooKeeper 基本操作
ZooKeeper的数据模型及其API支持以下九个基本操作:
| 操作 | 描述 |
|---|---|
| create | 在ZooKeeper命名空间的指定路径中创建一个znode |
| delete | 从ZooKeeper命名空间的指定路径中删除一个znode |
| exists | 检查路径中是否存在znode |
| getChildren | 获取znode的子节点列表 |
| getData | 获取与znode相关的数据 |
| setData | 将数据设置/写入znode的数据字段 |
| getACL | 获取znode的访问控制列表(ACL)策略 |
| setACL | 在znode中设置访问控制列表(ACL)策略 |
| sync | 将客户端的znode视图与ZooKeeper同步 |
我们来使用ZooKeeper Java shell对上面中提到的ZooKeeper操作进行演示:
- 用
ThisIsTheRootNode作为数据创建一个名为root的znode:
[zk: localhost(CONNECTED) 0] create /root "ThisIsTheRootNode"
Created /root
- 获取刚创建的
root的znode的内容:
[zk: localhost(CONNECTED) 1] get /root
"ThisIsTheRootNode"
…… ……
…… ……
- 用
ThisIsChild-1作为数据为root创建一个名为child-1的子节点:
[zk: localhost(CONNECTED) 2] create /root/child-1 "ThisIsChild-1"
Created /root/child-1
- 用
ThisIsChild-2作为数据为root创建一个名为child-2的子节点:
[zk: localhost(CONNECTED) 3] create /root/child-2 "ThisIsChild-2"
Created /root/child-2
- 列出
root的子节点:
[zk: localhost(CONNECTED) 4] ls /root
[child-2, child-1]
- 获取
root的访问控制列表:
[zk: localhost(CONNECTED) 5] getAcl /root
'world,'anyone
: cdrwa
- 由于
root拥有2个子节点,所以不允许删除root:
[zk: localhost(CONNECTED) 6] delete /root
Node not empty: /root
- 删除子节点
child-1:
[zk: localhost(CONNECTED) 7] delete /root/child-1
- 删除子节点
child-2:
[zk: localhost(CONNECTED) 8] delete /root/child-2
- 列出
root的内容:
[zk: localhost(CONNECTED) 9] ls2 /root
[]
…… ……
…… ……
- 删除
root:
[zk: localhost(CONNECTED) 10] delete /root
除了上述描述的操作外,ZooKeeper还支持使用称为multi的操作对znodes进行批量更新。 这将多个原始操作组合在一起成为一个单元。 一个multi操作本质上也是原子的,这意味着要么所有的更新成功,要么整个更新整个失败。
ZooKeeper不允许部分写入或读取znode数据。 设置znode的数据或读取时,znode的内容将被替换或完全读取。 ZooKeeper中的更新操作(如delete或setData操作)必须指定正在更新的znode的版本号。 版本号可以通过使用exists()方法调用来获得。 如果指定的版本号与znode中的版本号不匹配,则更新操作将失败。 另外,需要注意的另一件重要的事情是ZooKeeper中的更新是非阻塞(non-blocking)操作。
ZooKeeper中的读写操作如下图所示:

从前面的图片中,需要注意这些操作两个关键地方:
- Read requests:这些在客户端当前连接的ZooKeeper服务器上进行局部处理
- Write requests:这些被转发给领导者,并在生成响应之前通过多数协商一致
4. ZooKeeper 基本操作的更多相关文章
- zookeeper基本操作
理解Zookeeper的一种方法是将他视为一个提供高可用性的文件系统.它没有文件和目录,但是有一个统一概念的节点,叫做znode,作为数据以及其他znode的容器.znode来自于一个层次级的命名空间 ...
- 转载:ZooKeeper Programmer's Guide(中文翻译)
本文是为想要创建使用ZooKeeper协调服务优势的分布式应用的开发者准备的.本文包含理论信息和实践信息. 本指南的前四节对各种ZooKeeper概念进行较高层次的讨论.这些概念对于理解ZooKeep ...
- ZooKeeper程序员指南(转)
译自http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html 1 简介 本文是为想要创建使用ZooKeeper协调服务优势的分布式 ...
- ZooKeeper学习第四期---构建ZooKeeper应用
一.配置服务 配置服务是分布式应用所需要的基本服务之一,它使集群中的机器可以共享配置信息中那些公共的部分.简单地说,ZooKeeper可以作为一个具有高可用性的配置存储器,允许分布式应用的参与者检索和 ...
- zookeeper[1] (转)ZooKeeper Programmer's Guide(zookeeper编程向导)---中文
原文:http://www.cnblogs.com/Xrinehart/p/3512509.html 本文是为想要创建使用ZooKeeper协调服务优势的分布式应用的开发者准备的.本文包含理论信息和实 ...
- 【Zookeeper系列】构建ZooKeeper应用(转)
原文地址:https://www.cnblogs.com/sunddenly/p/4064992.html 一.配置服务 配置服务是分布式应用所需要的基本服务之一,它使集群中的机器可以共享配置信息中那 ...
- ZooKeeper系列 (4) 构建ZooKeeper应用
原文地址: http://www.cnblogs.com/wuxl360/p/5817540.html 一.配置服务 配置服务是分布式应用所需要的基本服务之一,它使集群中的机器可以共享配置信息中那些公 ...
- ZooKeeper开发者指南(五)
引言 这个文档是为了想利用ZooKeeper的协调服务来创建分布式应用的开发者提供的指南.它包括概念和实践的信息. 这个文档的一开始的的四部分呈现了不同ZooKeeper高级概念的的讨论.理解Zook ...
- zookeeper程序员指南
1 简介本文是为想要创建使用ZooKeeper协调服务优势的分布式应用的开发者准备的.本文包含理论信息和实践信息.本指南的前四节对各种ZooKeeper概念进行较高层次的讨论.这些概念对于理解ZooK ...
随机推荐
- poj1014二进制优化多重背包
Dividing Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 53029 Accepted: 13506 Descri ...
- python-实现一个贴吧图片爬虫
今天没事回家写了个贴吧图片下载程序,工具用的是PyCharm,这个工具很实用,开始用的Eclipse,但是再使用类库或者其它方便并不实用,所以最后下了个专业开发python程序的工具,开发环境是Pyt ...
- Java中Math.round()函数
Math.round(11.5) = 12; Math.round(-11.5) = -11; Math.round()函数是求某个数的整数部分,且四舍五入.
- MSSQL查询数据分页
这几天刚好碰到数据的分页查询,觉得不错,Mark一下,方法有两种,都是使用select top,效率如何就不在这讨论 方法1:利用select top配合not in(或者not exists),查询 ...
- windows2008(64位)下iis7.5中的url伪静态化重写(urlrewrite)
以前在windows2003里,使用的是iis6.0,那时常使用的URL重写组件是iisrewrite,当服务器升级到windows2008R2时,IIS成了64位的7.5,结果iisreite组件是 ...
- 第八章 关于SQL查询出错的一些问题
问题一:在使用MySQL使用传参查询并返回结果集时,没错,小伙伴们都知道少不了Statement接口和PreparedStatement对象.问题来了,有时竟然查询不了,Debug进去,发现执行的SQ ...
- J2EE走向成功路-02-Struts2 配置(Maven)
在上一篇中,介绍了使用jar包搭建Struts2框架,这一篇中来介绍一下在Maven环境下搭建Struts2框架,主要为配置Maven. 1.下载Maven,官网:http://maven.apach ...
- Installation of the JDK-9 on ubuntu(linux上安装jdk-9)
Description:Java SE 9 is the latest update to the Java Platform(General Availability on 21 September ...
- Django Form表单学习总结
Form中添加自定义的验证: 1.对特定字段属性的验证; 2.包含多字段的验证. 先创建一个简单的Form: from django import forms class ContactF ...
- 浅谈oracle树状结构层级查询之start with ....connect by prior、level及order by
浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...