1.Zookeeper的数据结构
- Zookeeper的数据结构和文件的目录结构类似,主要区别是文件的目录结构中,目录和文件是区分开的,但是Zookeeper的数据树节点既是路径,也存储文件。
- Zookeeper的数据结构如下图所示:
- 所有的node都从根节点
/
创建,zookeeper的节点称为znode。 - 每个znode的组成结构包含:
- path:节点的全路径(没有相对路径的说法)
stat:节点的状态信息(重点)。
- data:节点下存储的数据(不一定有值)。
- 从上图可以看出,znode可同时存储数据也可以有子节点。
- 下图是通过Zookeeper的客户端对znode节点进行get后的输出信息(除第一行是data数据,其他就是znode的stat信息):
- 第一行:9527是节点存储的数据。
- cZxid:znode创建时的事务id(16进制)。
- ctime:znode创建的时间。
mZxid
:znode最后一次修改的事务id。- mtime:最后一次修改的时间。
- pZxid:数据节点的
子节点列表
,最后一次被修改的事务id- 即在一个znode下创建一个子znode,可以看到子znode的cZxid,mZxid,pZxid都等于这个值,其中cZxid不会改变,另外mZxid,pZxid进行相应的操作会发生变更。
- cversion:子节点的版本号。
- dataVersion:数据节点的版本号,变更一次加1。
- aclVersion:数据的ACL(权限控制列表)版本号,变更一次加1。
- ephemeralOwner:如果是临时节点,则表示该节点创建的会话id,否则为0x0(
ephemeralOwner = 0x169843156830000
)。 - dataLength:数据长度(中文1个字表示3个字节长度)。
- numChildren:子节点的数据长度。
2.Zookeeper的命令行操作
- 在通过zookeeper提供的客户端登录脚本{zookeeper_home}\bin\
zkCli.sh
连接到zookeeper服务后,输入help
可以看到zookeeper支持的命令。 - zookeeper命令行操作,支持的命令如图:
- Zookeeper的命令行操作可以和其提供的API库一一对应起来,先学习其命令行工具,再转回查看其客户端库的API会十分方便理解。
- 所有的node都从根节点
- Zookeeper的客户端端命令:
- 连接zookeeper服务:
./zkCli.sh -server ip:port
- 连接成功后,连接其他zookeeper服务:
connect host:port
- 创建命令:
- znode节点分为
临时
和有序
两种组合类型,即存在临时节点,临时有序节点,持久节点,持久有序节点。 - 临时节点:
create -e /test ""
-e表示临时节点,只在当次会话存在
,会话消失则删除。 - 临时有序节点:
create -e -s /test ""
-s表示节点有序,有序是指对创建节点的名称后拼接一个有序自增数。如示例命令创建节点名称为/test0000000111
- 创建节点时,去除
-e
参数,则分别表示持久节点和持久有序节点。
- znode节点分为
- 修改命令:
set path data [version]:
针对指定的路径进行重新赋值,上图中有一个可选参数version
,为前面介绍的znode的stat信息中dataVersion
的值,操作时指定这个值,则必须在操作znode的dataVersion值等于指定值
时,修改指令才能生效。
- 删除命令
delete path [version]
:其中version作用和修改命令中的一致,delete只能删除没有子节点
的znode。rmr path
:删除指定节点,及其子节点。
- 查看命令:
get path [watch]
:查看znode的data和stat信息。其中可选参数watch
,表示是否在此节点设置监视点,true或false。在进行修改命令操作时会触发监听器
,监听器只能被触发一次,如果需要再次监听,需要重新设置监听。ls path [watch]
:查看znode下的子znode。也可以设置监听器,对子节点的创建删除进行监听。stat path [watch]
:查看前面介绍的znode的stat信息,设置的监听器,监听该节点的数据变化。ls2
:为get和stat的结合。
- 权限命令
- 见下一篇博客
- 配额命令
- 后续博客更新。
- 连接zookeeper服务:
PS:欢迎各位留言交流~~