博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zookeeper客户端的使用
阅读量:6316 次
发布时间:2019-06-22

本文共 1810 字,大约阅读时间需要 6 分钟。

与mysql、redis等软件一样,zookeeper的软件包中也提供了客户端程序用于对服务器上的数据进行操作。本节我们就来学习zookeeper客户端的使用方法。不过在详细讲解zk客户端的使用方法之前,我们会先来讨论zookeeper的数据存储结构,只有理解了zookeeper的数据存储结构,才会真正明白zk操作的真正含义。

zookeeper数据存储结构

zookeeper采用树状结构对数据进行存储,整个数据存储结构非常类似于linux的文件系统。如下图所示,节点node_1的路径是/node_1,节点node_1_1的路径是/node_1/node_1_1。zookeeper就是通过对这些节点进行创建、删除、修改、读取等操作来完成系统功能的。

zookeeper数据存储结构

连接zookeeper服务器

在zookeeper的bin目录下,名为zkCli.sh的文件就是zookeeper为我们提供的客户端脚本程序。我们可以通过它操作zookeeper服务器上的数据。使用zkCli.sh连接zk服务器的命令格式:./zkCli.sh -timeout 0 -server ip:port。这里的timeout参数是会话超时时间,单位是毫秒,如果在此时间内zk服务器没有收到客户端的心跳包,那么这个会话就失效了。与zk服务器建立连接如下图所示,注意到最后的提示符中有CONNECTED代表已经成功与服务器建立了连接。

图片描述

执行h命令可以查看zookeeper支持的操作命令列表。

图片描述

这些命令大致可分为增删改查4种类型,下面我们对其进行一一介绍。

ls查看某个节点的全部子节点

ls命令用于列出某个节点下的所有子节点信息。

图片描述

此处列出了/节点下的全部子节点信息,由于我们还没有创建任何节点,所以只有一个zookeeper节点(由zk自己默认创建)存在。

create创建一个节点

create命令用于创建一个新的节点,它的命令格式create [-s] [-e] path data acl。path是节点的路径,data是节点中存储的数据值,acl是节点的权限(权限相关内容将在java api部分讲解)。参数s表示创建一个顺序节点。

图片描述

上面的示例连续执行了3次create -s /node_1 123命令,由于加了参数-s,所以zk会自动在创建的节点名字后面增加一个后缀,并且后缀名字是递增的。

参数e表示创建的是一个临时节点,临时节点只在本会话内有效,登出之后临时节点就会被删除。

stat查看一个节点的状态信息

下面例子创建了一个新的/node_1节点,用stat命令查看节点的信息如下:

图片描述

在zookeeper中,每次对数据节点的写操作都是一个事务,每个事务都有一个唯一的事务id作为这个事务的标识。

cZxid就是创建这个节点的事务id。
ctime是创建这个节点的时间。
mZxid是最后更新该节点的事务id。
mtime是节点被最后更新的时间。
pZxid是节点的子节点列表被最后一次更新的事务id。子节点列表被更新只有两种情况,分别是“增加子节点”和“删除子节点”。修改子节点的数据内容不包括在内。
cversion是当前节点的子节点的变更版本号。
dataVersion当前节点存储数据内容的变更版本号。
aclVersion当前数据节点acl的变更版本号。上面3个版本号均可以用于实现乐观锁。
ephemeralOwner为创建该临时节点的事务id。如果是持久节点,那么该值固定为0。
dataLength表示当前节点存储数据内容的长度。
numChildren表示当前节点包含的子节点个数。

get命令获取当前节点存储数据的内容

get命令可以获取一个节点存储的数据内容,同时可以获取该节点的stat信息。

图片描述

ls2是ls的超级指令

ls2除了可以列出当前节点的所有子节点,还能列出当前节点的stat信息。

set命令修改一个节点中存储的数据

图片描述

delete命令删除节点

delete命令可以用于删除一个节点,但它只能删除没有任何子节点的节点。在下面的例子中,节点/node_1中有一个子节点/node_1/node_1_1。所以不能用delete命令删除节点/node_1。

图片描述

以上就是zookeeper客户端提供的比较重要的命令。注意在zookeeper的所有写操作中,都有一个version字段,可以利用这个字段实现乐观锁。

转载地址:http://ofuaa.baihongyu.com/

你可能感兴趣的文章
谈谈MVC项目中的缓存功能设计的相关问题
查看>>
【百度地图API】如何进行地址解析与反地址解析?——模糊地址能搜索到精确地理信息!...
查看>>
[20170117]添加检索引擎.txt
查看>>
代理商变操盘手:在线旅游到底玩啥花样
查看>>
Sublimetext 3 常用插件
查看>>
利用内存破坏实现Python沙盒逃逸
查看>>
来自麻省理工的信息抽取
查看>>
.Net中EF针对大数据量查询超时的一种优化
查看>>
使用强类型数据集进行有效编码——转载
查看>>
Android——简单对话框
查看>>
LINUX系统中动态链接库的创建与使用{补充}
查看>>
三维视觉国际会议首度在中国举办
查看>>
自动驾驶的出现,是否会给美国卡车司机彻底“宣判死刑”?
查看>>
达索系统入手XFlow开发商 强化3DEXPERIENCE平台的仿真能力
查看>>
大数据行业图谱之三:为什么大数据应用公司这么贵?
查看>>
超融合技术工作负载优化技巧
查看>>
微信公众平台身份验证出问题 回应称开发哥正在修复
查看>>
IOS6.1单元测试持续集成实践
查看>>
Selenium 利用javascript 控制滚动条
查看>>
光伏风控白皮书正式发布
查看>>