ZooKeeper客户端详解及可视化客户端

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 我们可以去 ZooKeeper 官网 下载,这里我下载了 ZooKeeper 3.7.0 版本下载解压后,进入 apache-zookeeper-3.7.0-bin/bin 目录,这里有客户端、服务端和一些工具。在 Windows 中可以执行.cmd 结尾的执行文件,在 Mac 或 Linux 中可以执行 .sh 结尾的可执行文件。名为 zkCli 的文件就是 ZooKeeper 的客户端了,我们可以用这个客户端来连接到 ZooKeeper 注册中心,来对节点进行查看或增删操作。

网络异常,图片无法展示
|


下载


我们可以去 ZooKeeper 官网 下载,这里我下载了 ZooKeeper 3.7.0 版本

下载解压后,进入 apache-zookeeper-3.7.0-bin/bin 目录,这里有客户端服务端和一些工具。在 Windows 中可以执行.cmd 结尾的执行文件,在 Mac 或 Linux 中可以执行 .sh 结尾的可执行文件。名为 zkCli 的文件就是 ZooKeeper 的客户端了,我们可以用这个客户端来连接到 ZooKeeper 注册中心,来对节点进行查看或增删操作。

使用

我是在 Mac 环境下演示使用的

接下来就说下这个客户端怎么使用。

连接

第一步就是要连接到 ZooKeeper 服务,当你执行 zkCli.sh 不带任何参数时,它默认是连接到本地的 localhost:2181 地址。如果你要连接到指定地址,可以使用 -server 配置:

./zkCli.sh -server localhost:2181
# 还可以加上连接超时时间(单位:毫秒)
./zkCli.sh -timeout 3000 -server localhost:2181

连接上后,终端就会变成这样:

[zk: localhost:2181(CONNECTED) 0] 

然后你可以输入 help 来查看执行的命令:

ZooKeeper -server host:port -client-configuration properties-file cmd args
  addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
  addauth scheme auth
  close
  config [-c] [-w] [-s]
  connect host:port
  create [-s] [-e] [-c] [-t ttl] path [data] [acl]
  delete [-v version] path
  deleteall path [-b batch size]
  delquota [-n|-b|-N|-B] path
  get [-s] [-w] path
  getAcl [-s] path
  getAllChildrenNumber path
  getEphemerals path
  history
  listquota path
  ls [-s] [-w] [-R] path
  printwatches on|off
  quit
  reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
  redo cmdno
  removewatches path [-c|-d|-a] [-l]
  set [-s] [-v version] path data
  setAcl [-s] [-v version] [-R] path acl
  setquota -n|-b|-N|-B val path
  stat [-w] path
  sync path
  version
  whoami

在客户端里面,也可以使用命令 connect 来切换连接的 ZooKeeper 的服务地址:

[zk: localhost:2181(CONNECTED) 12] connect localhost:2181

创建节点


永久节点

可以使用 create 命令来创建一个永久节点:

[zk: localhost:2181(CONNECTED) 18] create /node
Created /node

临时节点

临时节点当客户端断开后,这个节点就会被删除

[zk: localhost:2181(CONNECTED) 19] create -e /tmp_node
Created /tmp_node

临时节点不能够有子节点,当要创建它的子节点时就会报错 Ephemerals cannot have children :

[zk: localhost:2181(CONNECTED) 20] create -e /tmp_node/t1
Ephemerals cannot have children: /tmp_node/t1

顺序节点

ZooKeeper 可以为我们自定创建递增的顺序节点

[zk: localhost:2181(CONNECTED) 23] create -s /seq_node
Created /seq_node0000000017
[zk: localhost:2181(CONNECTED) 24] create -s /seq_node
Created /seq_node0000000018
[zk: localhost:2181(CONNECTED) 25] create -s /seq_node
Created /seq_node0000000019

容器节点

容器节点当其子所有节点都被删除时,它自己也会被删除

# 创建容器节点
[zk: localhost:2181(CONNECTED) 39] create -c /container
Created /container
# 创建容器节点的子节点
[zk: localhost:2181(CONNECTED) 43] create /container/c1
Created /container/c1
[zk: localhost:2181(CONNECTED) 44] create /container/c2
Created /container/c2
# 删除容器节点的子节点
[zk: localhost:2181(CONNECTED) 46] delete /container/c1
[zk: localhost:2181(CONNECTED) 47] delete /container/c2
# 过了一会后,容器节点被删除了
[zk: localhost:2181(CONNECTED) 56] get /container
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /container

ttl 节点

ZooKeeper 也可以为节点设置有效期,单位是毫秒。要创建这个节点时,需要 ZooKeeper 服务端在启动时设置 zookeeper.extendedTypesEnabled=true ,否则在创建时就会失败:KeeperErrorCode = Unimplemented

创建时设置的过期时间单位时毫秒:

[zk: localhost:2181(CONNECTED) 57] create -t 3000 /ttl_node
Created /ttl_node

删除节点

zkCli 中可以用 delete 命令来删除节点,在删除一个节点时,必须保证该节点下面没有子节点

[zk: localhost:2181(CONNECTED) 6] create /node1
Created /node1
[zk: localhost:2181(CONNECTED) 7] delete /node1
# 如果有子节点的话,删除时会报错
[zk: localhost:2181(CONNECTED) 10] create /node1
Created /node1
[zk: localhost:2181(CONNECTED) 11] create /node1/n1
Created /node1/n1
[zk: localhost:2181(CONNECTED) 12] delete /node1
Node not empty: /node1

如果你想一次性删除节点包括其所有子节点时,可以使用 deleteall 命令来进行删除

[zk: localhost:2181(CONNECTED) 14] deleteall /node1

查看节点

查看所有子节点

我们可以用 ls 命令来查看某个节点的所有子节点,比如我们查看根目录下的所有节点时,就可以这样用:

[zk: localhost:2181(CONNECTED) 20] ls /
[quota, zookeeper]

查看 zookeeper 节点的子节点

[zk: localhost:2181(CONNECTED) 21] ls /zookeeper
[config, quota]

查看节点的状态

可以用 stat 来查看一个节点的状态,比如我们查看根节点的状态时:

[zk: localhost:2181(CONNECTED) 22] stat /
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0xe
cversion = 4
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2

字段说明:

字段 描述
czxid 创建znode的zxid
mzxid 最近一次修改znode的zxid(创建、删除、set直系子节点、set自身节点都会计数)
pzxid 最近一次修改子节点的zxid(创建、删除直系子节点都会计数,set子节点不会计数)
ctime 创建znode的时间,单位毫秒
mtime 最近一次修改znode的时间,单位毫秒
dataVersion 修改znode数据的次数
cversion 修改子节点的次数(创建、删除直系子节点都会计数,set子节点不会计数)
aclVersion 该znode的ACL修改次数
ephemeralOwner 临时znode节点的session id,如果不是临时节点,值为0
dataLength znode携带的数据长度,单位字节
numChildren 直系子节点的数量(不会递归计算孙节点)

查看节点的数据

可以使用 set 命令来设置节点的数据,当要获取这个设置的数据时,就可以使用 get 命令来获取节点的数据

[zk: localhost:2181(CONNECTED) 27] create /node
Created /node
[zk: localhost:2181(CONNECTED) 28] set /node 我的数据
[zk: localhost:2181(CONNECTED) 29] get /node
我的数据

终端可视化客户端

网络异常,图片无法展示
|

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
7月前
|
资源调度 前端开发 数据可视化
R语言参数自抽样法Bootstrap:估计MSE、经验功效、杰克刀Jackknife、非参数自抽样法可视化自测题
R语言参数自抽样法Bootstrap:估计MSE、经验功效、杰克刀Jackknife、非参数自抽样法可视化自测题
|
4月前
|
存储 API Apache
【zookeeper 第三篇章】客户端 API
本文介绍了Apache ZooKeeper客户端的一些常用命令及其用法。首先,`create`命令用于创建不同类型的节点并为其赋值,如持久化节点、有序节点及临时节点等。通过示例展示了如何创建这些节点,并演示了创建过程中的输出结果。其次,`ls`命令用于列出指定路径下的所有子节点。接着,`set`命令用于更新节点中的数据,可以指定版本号实现乐观锁机制。
38 0
|
2月前
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
70 1
|
3月前
|
负载均衡 API 数据安全/隐私保护
Zookeeper的客户端-原生的API
Zookeeper的客户端-原生的API
|
5月前
|
API
【想进大厂还不会阅读源码】ShenYu源码-替换ZooKeeper客户端
ShenYu源码阅读。相信大家碰到源码时经常无从下手,不知道从哪开始阅读😭。我认为有一种办法可以解决大家的困扰!至此,我们发现自己开始从大量堆砌的源码中脱离开来😀。ShenYu是一个异步的,高性能的,跨语言的,响应式的 API 网关。
|
7月前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
【4月更文挑战第11天】ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
78 11
|
7月前
|
存储
ZooKeeper客户端常用命令
ZooKeeper客户端常用命令
71 1
Zookeeper学习---2、客户端API操作、客户端向服务端写数据流程
Zookeeper学习---2、客户端API操作、客户端向服务端写数据流程
Zookeeper学习---2、客户端API操作、客户端向服务端写数据流程
|
7月前
|
存储 设计模式 算法
深入浅出Zookeeper源码(六):客户端的请求在服务器中经历了什么
当我们向zk发出一个数据更新请求时,这个请求的处理流程是什么样的?zk又是使用了什么共识算法来保证一致性呢?带着这些问题,我们进入今天的正文。
184 1
深入浅出Zookeeper源码(六):客户端的请求在服务器中经历了什么
|
7月前
|
Apache
Apache ZooKeeper - 构建ZooKeeper源码环境及StandAlone模式下的服务端和客户端启动
Apache ZooKeeper - 构建ZooKeeper源码环境及StandAlone模式下的服务端和客户端启动
139 2