与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的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字段,可以利用这个字段实现乐观锁。

摘自:https://segmentfault.com/a/1190000012070655

【分布式】Zookeeper客户端基本的使用的更多相关文章

  1. 【分布式】Zookeeper客户端

    一.前言 前篇博客分析了Zookeeper的序列化和通信协议,接着继续学习客户端,客户端是开发人员使用Zookeeper最主要的途径,很有必要弄懂客户端是如何与服务端通信的. 二.客户端 2.1 客户 ...

  2. zookeeper 客户端编程

    zookeeper是一个分布式的开源的分布式协调服务,用它可以来现同步服务,配置维护.zookeeper的稳定性也是可以保证的,笔者曾参与过的使用zookeeper的两个应用,一个是用zookeepe ...

  3. zookeeper客户端操作

    ZooKeeper客户端 zkCli.sh 节点的增删改查 在 bin 目录下的  zkCli.sh  就是ZooKeeper客户端 ./zkCli.sh -timeout 5000  -server ...

  4. Zookeeper客户端Curator基本API

    在使用zookeper的时候一般不使用原生的API,Curator,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连.反复注册Watcher和NodeExistsExceptio ...

  5. Zookeeper客户端Curator的使用,简单高效

    Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeeper客户端的开发量. 1.引入依赖: ...

  6. ZooKeeper客户端 zkCli.sh 节点的增删改查

    zkCli.sh 在 bin 目录下的  zkCli.sh  就是ZooKeeper客户端 ./zkCli.sh -timeout 5000  -server 127.0.0.1:2181  客户端与 ...

  7. Zookeeper客户端Curator使用详解

    Zookeeper客户端Curator使用详解 前提 最近刚好用到了zookeeper,做了一个基于SpringBoot.Curator.Bootstrap写了一个可视化的Web应用: zookeep ...

  8. zookeeper(六):Zookeeper客户端Curator的API使用详解

    简介 Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连.反复注册Watcher和NodeExistsEx ...

  9. Zookeeper客户端对比选择_4

    Zookeeper客户端对比选择 本文思维导图 使用框架的好处是自带一套实用的API,但是Zookeeper虽然非常强大,但是社区却安静的可怕,版本更新较慢,下面会先从zookeeper原生API的不 ...

随机推荐

  1. Linux oracle 导入sql文件

    1.@sql文件的路径 SQL>@/data/xx.sql; 2.导入完毕 commit;

  2. OpenAPITools 实践

    OpenAPITools 可以依据 REST API 描述文件,自动生成服务端桩(Stub)代码.客户端 SDK 代码,及文档等.其是社区版的 Swagger ,差异可见:OpenAPI Genera ...

  3. 攻防世界 WEB 高手进阶区 PHP2 Writeup

    攻防世界 WEB 高手进阶区 PHP2 Writeup 题目介绍 题目考点 url 二次解码 index.phps 文件(第一次使用dirsearch可能扫不到,需要加到工具字典里) php 简单语法 ...

  4. 基于大量图片与实例深度解析Netty中的核心组件

    本篇文章主要详细分析Netty中的核心组件. 启动器Bootstrap和ServerBootstrap作为Netty构建客户端和服务端的路口,是编写Netty网络程序的第一步.它可以让我们把Netty ...

  5. PTA 6-1 求采用邻接矩阵作为存储结构的无向图各顶点的度 (6分)

    PTA 6-1 求采用邻接矩阵作为存储结构的无向图各顶点的度 (6分) 函数接口定义: 函数接口为: void dgree(MGraph G); G为采用邻接矩阵作为存储结构的有向图 裁判测试程序样例 ...

  6. OpenXml SDK学习笔记(1):Word的基本结构

    能写多少篇我就不确定了,可能就这一篇就太监了,也有可能会写不少. OpenXml SDK 相信很多人都不陌生,这个就是管Office一家的文档格式,Word, Excel, PowerPoint等都用 ...

  7. JMeter接口自动化发包与示例

    JMeter接口自动化发包与示例 近期需要完成对于接口的测试,于是了解并简单做了个测试示例,看了看这款江湖上声名远播的强大的软件-Jmeter靠不靠谱. 官网:https://jmeter.apach ...

  8. wm_concat结果长度限制的有关问题 ORA-06502: PL/SQL: 数字或值错误

    该函数作用是把列值合并(用英文逗号分割),但是数量有限制,返回的字符数上线是4000(oracle11g),超过会报错,听说oracle版本到 11.2.0.2.0 或以上返回的是clob类型,长度就 ...

  9. 注解@RunWith的作用

    @RunWith就是一个运行器 @RunWith(JUnit4.class)就是指用JUnit4来运行 @RunWith(SpringJUnit4ClassRunner.class),让测试运行于Sp ...

  10. 暑假算法练习Day3

    第三天!!!最近要开始归纳总结Python学习啦!! 1006 换个格式输出整数 (15 分) 让我们用字母 B 来表示"百".字母 S 表示"十",用 12. ...