目录

Zookeeper 原生客户端

Apache Curator 开源客户端

可视化客户端工具 ZooInspector


Zookeeper 原生客户端

1、类似 Redis 有多种 Java 客户端操作可以操作 Reids 一样,Zookeeper  也有多种客户端可以操作 ZK 服务器,比如 zookeeper 原生客户端,以及第三方的 ZkClient 和 Curator,其中最受欢迎的是 Netfix 公司开源的 Curator。

这些客户端工具底层无非也是对 Zookeeper 客户端命令 的封装集成。

2、Apache ZooKeeper 官网 API 文档:Apache ZooKeeper - Server 3.6.1 API

一:导入 Apache ZooKeeper 依赖

        <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.6.1</version></dependency>

1、ZK 内部依赖如下:

Group / Artifact Version Updates
commons-lang » commons-lang 2.6 3.11
io.netty » netty-handler 4.1.48.Final 4.1.51.Final
io.netty » netty-transport-native-epoll 4.1.48.Final 4.1.51.Final
log4j » log4j 1.2.17 2.13.3
org.apache.yetus » audience-annotations 0.5.0 0.12.0
org.apache.zookeeper » zookeeper-jute 3.6.1
org.slf4j » slf4j-api 1.7.25 1.7.30
org.slf4j » slf4j-log4j12 1.7.25 1.7.30

在线演示源码:zookeeper-study/pom.xml at master · wangmaoxiong/zookeeper-study · GitHub

2、推荐直接引入下面 第三方户端 Curator 依赖,因为 Curator 客户端内部也是依赖 zookeeper ,引入 Curator 既能使用第三方的 Curator API 也能使用原生的 Zookeeper AIPI。

二:指定 Logback 日志配置文件,不记录日志时,可以忽略此步骤。

因为 spring-boot-starter-web 依赖中已经有了 slf4j + logback 日志依赖,所以将 zk 依赖的日志全部排除了,改用 logback 日志实现。

在线演示源码:zookeeper-study/logback.xml at master · wangmaoxiong/zookeeper-study · GitHub

三:Apache Zookeeper 客户端常用 API

ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)

创建 Zookeeper 实例对象

connectString:服务器连接地址,多个集群时,用逗号隔开,如:192.168.44.41:2181,192.168.44.42:2181,192.168.44.43:2181
sessionTimeout:会话超时(毫秒)。在 sessionTimeout 内没有心跳检测,会话就标记为失效的
watcher:设置观察者对象,接收节点变化通知。不监听时,可以传入 null

synchronized void close() 1、关闭此客户端对象,客户机关闭后,其会话将变为无效。
2、ZooKeeper 服务器中与会话关联的所有临时节点都将被删除,这些节点(以及它们的父节点)上的监视将被触发。
boolean close(int waitForShutdownTimeoutMs) 1、此方法将等待内部资源释放。
2、waitForShutdownTimeoutMs:等待资源释放的超时(毫秒),使用零或负值跳过等待
3、如果 waitForShutdownTimeout 大于零并且所有资源都已释放,则返回 true
States getState() 获取客户端连接的状态,States 是一个枚举,有:CONNECTING,ASSOCIATING,CONNECTED,CONNECTEDREADONLY,CLOSED,AUTH_FAILED,NOT_CONNECTED;
long getSessionId() 此 ZooKeeper 客户端实例的会话 id, 返回的值在客户端连接到服务器之前无效,并且在重新连接后可能会更改。
List<String> getEphemerals() 同步获取此会话创建的所有临时节点
String create(final String path,byte[] data,List<ACL> acl,CreateMode createMode) 使用给定路径创建节点,创建成功时,返回创建的节点路径(path)
Stat exists(String path, boolean watch) 返回给定路径的节点的状态,如果不存在这样的节点,则返回 null。
byte[] getData(String path, boolean watch, Stat stat) 1、返回给定路径的节点的数据和状态。
2、如果监视(watch)为 true 且调用成功(不引发异常),则将在具有给定路径的节点上保留一个监视,
3、监视将由在节点上修改数据操作触发,会自动触发 new ZooKeeper 时指定的监视器
4、不存在指定路径时,抛出异常
List<String> getChildren(String path, boolean watch) 1、返回给定节点路径(path)的子节点列表。如果 path 节点不存在,则抛出异常
2、如果监视(watch)为 true 且调用成功(没引发异常),则将在具有给定路径的节点上保留一个监视。
3、成功删除给定路径的节点或在节点下创建/删除子节点的操作都将触发监视,会自动触发 new ZooKeeper 时指定的监视器
4、返回的子列表没有排序,也不保证其自然或词法顺序
5、还有很多重载的 getChildren 方法
Stat setData(final String path, byte[] data, int version)

修改节点树

1、如果给定路径(path)的节点存在,且给定版本(version)与节点的版本匹配(如果给定版本为-1,则匹配任何节点的版本),则设置该节点的数据。
2、返回节点的状态。
3、此操作如果成功,将触发 getData 调用留下的给定路径的节点上的所有监视,会自动触发 new ZooKeeper 时指定的监视器
4、如果指定的节点路径不存在,则抛异常;如果给定的版本不匹配,则抛异常。
5、数据(data)的大小不能超出 1 MB(1048576字节),否则抛异常。

void delete(final String path, int version)
void delete(final String path, int version, VoidCallback cb, Object ctx) : delete 的异步版本。

1、删除具有给定路径的节点,给定的版本必须与该节点的版本匹配(如果给定的版本是-1,则它匹配任何节点的版本)
2、如果路径不存在,则抛出异常;如果给定的版本号不匹配,则抛出异常;如果节点下还有子子节点,也会抛出异常。
3、此操作如果成功,将触发 exists API 调用在给定路径的节点上的所有监视,以及 getChildren API 调用留下的父节点上的所有监视。

四:API 演示源码在线地址:https://github.com/wangmaoxiong/src/test/java/com/wmx/zookeeperstudy/ZookeeperTest.java

Java 客户端操作之前,需要先 启动Zookeeper 服务器。

Apache Curator 开源客户端

1、就像人们不怎么喜欢使用原生的 JDBC 代码一样,人们也不太喜欢使用原生的 zk 客户端,而是喜欢市面上流行的第三方客户端,其中最为流行的就是 Apache Curator,在它们的封装之后,功能更加完善,性能也更强。

Zookeeper 原生 API 的不足
连接时无超时重连机制
Watcher 注册一次,触发后会自动失效。
不支持递归创建树形节点

2、Curator 和 Zookeeper 一样,都是 Apache 下面的顶级项目,Curator  官网地址:Apache Curator –

3、使用 Curator  可以导入依赖如下:

        <dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>5.1.0</version></dependency>
curator-recipes 内部会依赖 curator-framework,curator-framework 会依赖 curator-client,curator-client 会依赖 zookeeper、guava、slf4j-api。

curator-recipes 5.1 内部依赖的是 zookeeper 3.6.0。

导入了 curator-recipes ,则既可以使用 curator 也可以使用 zookeeper 原生客户端。

zookeeper-study/pom.xml at master · wangmaoxiong/zookeeper-study · GitHub

4、Curator  常用 API 如下:

创建 CuratorFramework 实例方式1

CuratorFrameworkFactory.newClient(connectString, sessionTimeoutMs, connectionTimeoutMs, retryPolicy);

connectString:要连接到的服务器列表
sessionTimeoutMs:会话超时时间,时间单位为毫秒,默认为 60 * 1000(1分钟)
connectionTimeoutMs:连接超时时间,时间单位为毫秒,默认为 15 * 1000(15秒)
retryPolicy:使用的重试策略

创建 CuratorFramework 实例方式2

CuratorFrameworkFactory.builder().defaultData("0".getBytes()).connectString(connectString)

.sessionTimeoutMs(sessionTimeoutMs).connectionTimeoutMs(connectionTimeoutMs)

.retryPolicy(retryPolicy).namespace(namespace).build();

RetryPolicy: 重试连接时要使用的策略,这是个超接口,其常用实现类如下:
  ExponentialBackoffRetry:在重试间隔增加睡眠时间的情况下重试一定次数
  BoundedExponentialBackoffRetry:重试次数设置为最大重试次数
  RetryForever:永远重试,可设置重试时间间隔
  RetryNTimes:重试最多重试次数的策略
  RetryOneTime:只重试一次的重试策略
  RetryUntilElapsed:在给定的时间段内重试
  SessionFailedRetryPolicy:Session 过期的重试策略
CuratorFramework 常用方法如下
ExistsBuilder checkExists() 用于检测某个节点是否存在,结果为 null 时表示节点不存在,否则返回节点详细信息
CreateBuilder create() 创建节点
T forPath(String path) 使用给定的路径和客户端的默认数据提交当前的构建操作

节点创建模式 {@link CreateMode}
  PERSISTENT: 永久节点,不带序列号
  PERSISTENT_SEQUENTIAL:永久节点,带序列号。序列号总是固定长度的 10 位数字,用0填充
  EPHEMERAL:临时节点,不带序列号。临时节点不能有子节点,且在断开连接后,临时节点自动删除。
  EPHEMERAL_SEQUENTIAL: 临时节点,带序列号。
  CONTAINER:容器节点,是有用的特殊用途节点,如 leader、lock 等。当容器的最后一个子节点被删除时,容器将成为服务器在将来某个时候删除的候选节点。

creatingParentContainersIfNeeded() 1、如果父节点未创建,则使用{@link CreateMode#CONTAINER} -容器节点模式创建
2、容器创建是 ZooKeeper 最新版本中的一个新功能。
3、当容器中的最后一个子节点被删除时,容器将成为服务器在将来某个时候删除的候选节点。
4、比如级联创建的临时节点,当客户端失去连接后,则级联创建的容器父节点也会一并消失
creatingParentsIfNeeded() 1、如果尚未创建任何父节点,则会一并创建这些节点
2、与上面不同,比如级联创建的临时节点,当客户端失去连接后,级联创建的父节点会留下,临时节点被删除
inBackground(BackgroundCallback callback) 1、重载了几个 inBackground 方法,表示在后台执行操作,即异步创建节点
2、callback 是异步创建的回调函数
DeleteBuilder delete()

创建节点删除生成器

注意被删除的节点下不能有子节点,否则异常:KeeperException$NotEmptyException
被删除节点必须存在,否则异常:KeeperException$NoNodeException

deletingChildrenIfNeeded 如果子节点存在则删除,比如 /summary/port1
1、如果 port1 存在,则会被删除,而 /summary 下即使没有其它节点,自己也不会被删除
2、如果 port1 不存在,则直接异常:KeeperException$NoNodeException
withVersion(int version) 根据版本号删除,version 默认为  -1,匹配任何版本,如果版本不匹配,则抛出异常:KeeperException$BadVersionException
guaranteed()

解决在服务器上操作可能成功,但在成功将响应返回到客户端之前发生连接失败的边缘情况。

级联删除。

GetDataBuilder getData()

获取节点数据

如果节点不存在,则抛出异常:KeeperException$NoNodeException

GetChildrenBuilder getChildren() 获取节点下的子节点
SetDataBuilder setData()

更新节点数据

如果节点不存在,则异常:KeeperException$NoNodeException

API 在线演示地址:

zookeeper-study/CuratorUtils.java at master · wangmaoxiong/zookeeper-study · GitHub

zookeeper-study/CuratorUtilsTest.java at master · wangmaoxiong/zookeeper-study · GitHub

可视化客户端工具 ZooInspector

1、通过 Zookeeper 客户端命令,以及上面的 zk 客户端,其实自己封装一个可视化的客户端工具也不难,用于连接 zk 服务器,然后对节点的增删改查等操作。如果不想自己封装,也可以使用别人的,比如有一个叫 ZooInspector 。

2、ZooInspector 使用流程:

1)下载 ZooInspector  压缩包:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

2)解压文件,然后双击 build 目录下的 zookeeper-dev-ZooInspector.jar 可执行文件运行程序

3)启动 ZooInspector 后,点击左上角的绿色按钮,输入 ZK Server 的连接地址即可发起连接。

4) 连接成功后就能看到 ZK 服务器的节点数据信息.。

3、ZooInspector 注意事项:

1)此工具能新增节点(默认为不带序列的永久节点,无法新增临时节点以及带序列节点)、删除节点、修改节点、查询节点

2)此工具对中文不友好,如果节点值是中文,则会乱码,同理如果用它创建节点,同时设置的值是中文,其它客户端读到的值就会乱码,显然就是编码不一致引起的。

3)节点值被其它客户端修改之后,此工具都能实时看到。

Zookeeper 原生客户端、可视化工具 ZooInspector 、Apache Curator相关推荐

  1. RedisDesktopManager客户端可视化工具下载安装与使用

    场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Re ...

  2. Zookeeper原生客户端

    1.1.1.1. 客户端基本操作 package cn.enjoy.javaapi; import org.apache.zookeeper.*; import java.io.IOException ...

  3. Git 客户端 - 可视化工具 Fork 使用

    Fork 是什么 当我们在多人协同开发项目的过程中,Git 是必不可少的代码托管工具,但是繁琐的操作命令.抽象的文件状态,多个不同分支需要花费大量的时间进行分配管理与维护,至此 Fork 拥有更简约的 ...

  4. mongodb官方客户端可视化工具Compass,免费,官方值得信赖

    之前一直用的客户端是nosqlbooster4mongo,基本操作还都是挺好用的,但是有一些命令在这个客户端上运行不了,以后要慢慢的替换到compass上. 下载compass 官方下载:https: ...

  5. Zookeeper Java 客户端 ——Apache Curator

    Zookeeper Java 客户端 --Apache Curator 一.基本依赖 二.客户端相关操作          2.1 创建客户端实例          2.2 重试策略          ...

  6. Python之分享常用的五款动态数据可视化工具

    一.Tableau 世界知名的 BI 工具,以超强的可视化能力著称.它已经成为商业 BI 界的 TOP 选手,很多大型公司像阿里.谷歌都在使用,能快速搭建数据系统. 可以通过设置页面动画,来制作动态可 ...

  7. 聊聊我常用的5款动态数据可视化工具

    视频当道的时代,数据可视化自然也要动起来. 我常用的动态可视化工具主要有「Tableau.Echarts.Flourish.Python」这几个,另外加上地图可视化神器「kepler.gl」. 这五款 ...

  8. ZooKeeper 之Apache Curator 客户端使用

    ZooKeeper 原生不足之处: 超时重连,不支持自动,需要手动操作 Watch注册一次后会失效 不支持递归创建节点 Apache Curator apache的开源项目,解决watcher注册一次 ...

  9. 三款Zookeeper可视化工具、ZooInspector、prettyZoo、ZooKeeperAssistant

    三款Zookeeper可视化工具.ZooInspector.prettyZoo.ZooKeeperAssistant ①Zookeeper图形化工具:ZooInspector 1.下载完后,解压压缩包 ...

最新文章

  1. Android 源码编译相关
  2. Coredata — 入门使用
  3. containerd — 容器引擎
  4. 【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )
  5. 学习《FreeRTOS源码详解与应用开发》笔记
  6. 将html转换为pptx,javascript – 将html表导出到客户端的ppt?
  7. Java基础知识总结(一)
  8. C语言unit test单元测试类的实现(附完整源码)
  9. R语言 深圳 面授_「深圳侦探电话」用R语言实现深度学习情感分析
  10. (原创) 电源滤波为何要用几个不同量级的电容并联?
  11. JDBC与JNDI应用比较
  12. Exception处理
  13. Eclipse断点种类
  14. 2018年数学建模竞赛-高温作业专用服装设计
  15. 计算机基础cpu知识,CPU基础知识大全详解
  16. 理工科专业精品书系列
  17. java get请求中文_如何解决java中get请求中文乱码的问题
  18. zblog插件全自动采集伪原创发布插件免费
  19. 杭电ACM 2000-2099 100道题 详细解题报告出炉
  20. 读书笔记《学习之道》芭芭拉·奥克利 - 一 书中说了什么

热门文章

  1. 最大熵阈值python_【6】python-opencv3教程:阈值分割(全阈值分割,局部阈值分割,直方图技术法,熵算法,自适应算法,Otsu算法)...
  2. 电容相位滞后?电感超前
  3. 2010年,我发现了淘宝购物省钱的秘密
  4. 赛车游戏中求解最短路径和最小曲率路径
  5. 六足蜘蛛机器人+哈尔的移动城堡,一个神奇组合的设计制作!
  6. 网络安全及安全分析(1)
  7. python -m http.server 8000
  8. 企业直播该如何做?硬件设备、网络环境、设备连接和观看权限等整个直播流程教程
  9. 需求调研报告模板_中国脂肪醇市场需求调研与十四五投资战略规划分析报告2021-2026年...
  10. C# GDI+绘图(四)实现网格绘制,并填充相应的表格内容