Zookeeper客户端使用

本篇将会介绍Zookeeper自带的客户端脚本,Java客户端API和开源客户端。

1、客户端脚本

在Zookeeper的安装目录下的 /bin 文件夹中有一个 zkCli.sh 脚本,这个是官方提供的客户端脚本。

1.1、连接

可以直接运行zkCli.sh脚本,默认就是连接本地的Zookeeper服务器。

sh zkCli.sh

如果想连接指定的Zookeeper服务器,需要在后面添加一些参数。

sh zkCli.sh -server ip:port
  • -server:表示指定Zookeeper服务器,后面跟服务器的IP地址和端口号。

例子:

指定连接 192.168.0.10 上的 Zookeeper 服务器。

sh zkCli.sh -server 192.168.0.10:2181
1.2、创建

使用 create 命令可以创建一个 ZNode 节点。默认创建永久节点。用法如下:

create [-s] [-e] path data acl
  • -s:表示创建一个顺序节点。
  • -e:表示创建一个临时节点。
  • path:表示要创建的节点路径名。
  • data:表示要创建的节点数据。
  • acl:表示要创建的节点的访问控制列表。可以不写,默认为 world:anyone:cdrwa。

注意:

  • 不可以递归创建。例如:创建 /create/node 节点时,其父节点 /create 必须已经存在。
  • 临时节点下不可以创建子节点。

例子:

创建一个永久顺序节点,节点路径为 /node,节点数据为 node,访问控制列表为 ip:192.168.0.10:cdrwa**。

create -s /node "node" ip:192.168.0.10:cdrwa
1.3、读取
1.3.1、ls

使用 ls 命令可以列出 Zookeeper 指定节点下的所有下级节点。用法如下:

ls path [watch]
  • path:表示要查询的节点路径。
  • watch:表示是否开启监控,监控 path 下的子节点变化(NodeChildrenChanged,NodeDeleted)。

例子:

列出根节点下的所有子节点。/ 表示根节点。

ls /
1.3.3、ls2

使用 ls2 命令可以列出 Zookeeper 指定节点下的所有下级节点,并且显示当前节点的属性信息。用法如下:

ls2 path [watch]
  • path:表示要查询的节点路径。
  • watch:表示是否开启监控,监控 path 下的子节点变化。

例子:

列出根节点下的所有子节点,并且查看根节点的属性信息。/ 表示根节点。

ls2 /
1.3.2、get

使用 get 命令可以获取 Zookeeper 指定节点的数据内容和属性信息。用法如下:

get path [watch]
  • path:表示要查询的节点路径。
  • watch:表示是否开启监控,监控节点变化(NodeDataChanged,NodeDeleted)。

例子:

获取 /node 节点的数据和属性信息。

get /node
1.4、更新

使用 set 命令可以更新指定节点的数据内容。用法如下:

set path data [version]
  • path:表示要更新的节点路径名。
  • data:表示要更新的节点数据。
  • version:表示指定基于哪个节点数据版本进行更新。

例子:

更新 /node 节点数据为 test。

set /node "test"
1.5、删除
1.5.1、delete

使用 delete 命令可以删除 Zookeeper 上的指定节点。用法如下:

delete path [version]
  • path:表示要删除的节点路径名。
  • version:表示指定基于哪个节点数据版本进行删除。

注意: 不支持递归删除。例如:删除 /create 节点时,其节点下不能存在子节点。

例子:

删除 /node 节点。

delete /node
1.5.2、rmr

使用 rmr 命令可以递归删除 Zookeeper 上的指定节点和其所有的子节点。用法如下:

rmr path
  • path:表示要删除的节点路径名。

例子:

删除 /node 节点和其下的所有子节点。

rmr /node
1.6、ACL
1.6.1、setAcl

使用 setAcl 命令可以设置 Zookeeper 上的指定节点的访问控制列表,即访问权限。具体可以设置哪些访问权限,请阅读 Zookeeper深入原理。用法如下:

setAcl path acl
  • path:表示要设置权限的节点路径名。
  • acl:表示要设置的权限列表,可以设置多种权限。

例子:

为 /node 节点设置权限 ip:192.168.0.10:cdrwa

setAcl /node ip:192.168.0.10:cdrwa
1.6.2、getAcl

使用 getAcl 命令可以获取 Zookeeper 上的指定节点的访问控制列表。用法如下:

getAcl path
  • path:表示要获取权限的节点路径名。

例子:

获取 /node 节点的访问控制列表。

getAcl /node
1.7、其他
1.7.1、stat

使用 stat 命令可以获取 Zookeeper 上的指定节点的属性信息。用法如下:

stat path [watch]
  • path:表示要获取属性信息的节点路径名。
  • watch:表示是否开启监控,监控节点变化(NodeDataChanged,NodeDeleted)。

例子:

查看 /node 节点属性信息。

stat /node
1.7.2、connect

使用 connect 命令可以连接 Zookeeper 上的指定服务器。用法如下:

connect host:port
  • host:表示要连接的 Zookeeper 服务器IP。
  • port:表示要连接的 Zookeeper 服务器端口号。

例子:

连接 192.168.0.12:2181 Zookeeper 服务器。

connect 192.168.0.12:2181
1.7.3、close

使用 close 命令可以关闭当前会话。用法如下:

close
1.7.4、quit

使用 quit 命令可以退出当前客户端。用法如下:

quit

2、Java客户端API

Zookeeper 官方提供了很多编程语言的客户端API,这里我只介绍Java客户端API。

API地址:https://zookeeper.apache.org/doc/r3.4.14/api/index.html

2.1、创建会话

客户端可以通过创建一个 Zookeeper(org.apache.zookeeper.Zookeeper) 实例来连接 Zookeeper服务器。

API列表:

  • Zookeeper(String connectString, int sessionTimeout, Watcher watcher)
  • Zookeeper(String connectString, int sessionTimeout, Watcher watcher, boolean canBeReadOnly)
  • Zookeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd)
  • Zookeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd, boolean canBeReadOnly)

参数介绍:

参数名说明
connectStringZookeeper服务器连接地址,多个服务器可以使用 , 连接。例如:192.168.0.10:2181,192.168.0.11:2181,192.168.0.12:2181
sessionTimeout指会话的超时时间,单位是毫秒。
watcherZookeeper允许客户端在构造方法中传入一个接口 Watcher 的实现类对象来作为默认的 Watcher 事件通知处理器。该参数也可以设置为 null,表明不设置默认的 Watcher 处理器。
canBeReadOnly这是一个 boolean 类型的参数,用于标识当前会话是否支持只读模式。
sessionId 和 sessionPasswd分别代表会话ID 和 会话密钥。这两个参数能够唯一确定一个会话,同时客户端可以使用这两个参数实现客户端会话复用,从而达到恢复会话的效果。
2.2、创建节点

客户端可以通过Zookeeper的API来创建一个数据节点。

API列表:

  • String create(String path, byte[] data, List acl, CreateMode createMode)
  • void create(String path, byte[] data, List acl, CreateMode createMode, AsyncCallback.StringCallback cb, Object ctx)

参数介绍:

参数名说明
path要创建的节点路径。
data要创建的节点的数据内容。
acl要创建的节点访问控制列表。
createMode要创建的节点的节点类型。节点类型:持久,持久顺序,临时,临时顺序。
cb回调函数,用于异步创建时使用。
ctx上下文信息,用于异步创建时传递数据使用。
2.3、读取数据

读取数据包括节点数据的获取和子节点列表的获取。

2.3.1、getData

客户端可以通过 Zookeeper 的 API 来获取一个节点的数据内容。

API列表:

  • byte[] getData(String path, boolean watch, Stat stat)
  • byte[] getData(String path, Watcher watcher, Stat stat)
  • void getData(String path, boolean watch, AsyncCallback.DataCallback cb, Object ctx)
  • void getData(java.lang.String path, Watcher watcher, AsyncCallback.DataCallback cb, Object ctx)

参数介绍:

参数名说明
path指定数据节点的节点路径
watch表明是否需要注册一个 Watcher。如果是就使用默认的 Watcher。
stat指定数据节点的状态信息。
watcher注册Watcher。
cb回调函数,用于异步获取数据时使用。
ctx上下文信息,用于异步获取数据时传递数据使用。
2.3.2、getChildren

客户端可以通过 Zookeeper 的 API 来获取一个节点的所有子节点。

API列表:

  • List getChildren(String path, boolean watch)
  • void getChildren(String path, boolean watch, AsyncCallback.Children2Callback cb, Object ctx)
  • void getChildren(String path, boolean watch, AsyncCallback.ChildrenCallback cb, Object ctx)
  • List getChildren(String path, boolean watch, Stat stat)
  • List getChildren(String path, Watcher watcher)
  • void getChildren(String path, Watcher watcher, AsyncCallback.Children2Callback cb, Object ctx)
  • void getChildren(String path, Watcher watcher, AsyncCallback.ChildrenCallback cb, Object ctx)
  • List getChildren(String path, Watcher watcher, Stat stat)

参数介绍:

参数名说明
path指定数据节点的节点路径。
watch表明是否需要注册一个 Watcher。如果是就使用默认的 Watcher。
watcher注册Watcher。
cb回调函数,用于异步获取数据时使用。
ctx上下文信息,用于异步获取数据时传递数据使用。
stat指定数据节点的节点状态信息。
2.4、更新数据

客户端可以通过 Zookeeper 的 API 来更新一个节点的数据内容。

API列表:

  • Stat setData(String path, byte[] data, int version)
  • void setData(String path, byte[] data, int version, AsyncCallback.StatCallback cb, Object ctx)

参数介绍:

参数名说明
path指定数据节点的节点路径。
data[]一个字节数组,即需要使用该数据内容来覆盖节点现在的数据内容。
version指定节点的数据版本。
cb回调函数,用于异步更新数据时使用。
ctx上下文信息,用于异步更新数据时传递数据使用。
2.5、删除节点

客户端可以通过Zookeeper的API来删除一个数据节点。

API列表:

  • void delete(String path, int version)
  • void delete(String path, int version, AsyncCallback.VoidCallback cb, Object ctx)

参数介绍:

参数名说明
path要删除的节点路径
version指定节点的数据版本
cb回调函数,用于异步删除时使用。
ctx上下文信息,用于异步删除时传递数据使用。
2.6、检测节点是否存在

客户端可以通过 Zookeeper 的 API 来检测节点是否存在。

API列表:

  • State exists(String path, boolean watch)
  • State exists(String path, Watcher watcher)
  • void exists(String path, boolean watch, AsyncCallback.StatCallback cb, Object ctx)
  • void exists(String path, Watcher watcher, AsyncCallback.StatCallback cb, Object ctx)

参数介绍:

参数名说明
path指定数据节点的节点路径。
watch指定是否复用 Zookeeper 中默认的 Watcher。
watcher注册的Watcher,用于监听以下三类事件:节点被创建、节点被删除、节点被更新
cb回调函数,用于异步检测节点是否存在时使用。
ctx上下文信息,用于异步检测节点是否存在时传递数据使用。

3、开源客户端

3.1、ZkClient

ZkClient 是 Github 上一个开源的 Zookeeper 客户端,是由 Datameer 的工程师 Stefan Groschupf 和 Peter Voss 一起开发的。ZkClient 在 Zookeeper 原生 API 接口之上进行了包装,是一个更易用的Zookeeper 客户端。同时,ZkClient 在内部实现了诸如 Session 超时重连、Watcher 反复注册等功能,使得 Zookeeper 客户端的这些繁琐的细节工作对开发人员透明。

这里我就不演示使用方法了,自己去探索研究吧。

3.2、Curator

Curator 是 Netflix 公司开源的一套 Zookeeper 客户端框架,其作者是 Jordan Zimmerman。和 ZkClient 一样,Curator 解决了很多 Zookeeper 客户端非常底层的细节开发工作,包括连接重连、反复注册 Watcher 和 NodeExistsException 异常等,目前已经成为了 Apache 的顶级项目,是全世界范围内使用最广泛的 Zookeeper 客户端之一。并且,Curator 在 Zookeeper 原生API的基础上进行了包装,提供了一套易用性和可读性更强的 Fluent 风格的客户端 API 框架。

除此之外,Curator 中还提供了 Zookeeper 各种应用场景(Recipe,如共享锁服务、Master选举机制和分布式计数器等)的抽象封装。

官网地址:http://curator.apache.org/

同样,这里我就不演示使用方法了,自己去探索研究吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值