Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >zookeeper API操作,基本命令及报错

zookeeper API操作,基本命令及报错

作者头像
chenchenchen
发布于 2019-09-02 09:36:42
发布于 2019-09-02 09:36:42
1.4K1
举报
文章被收录于专栏:chenchenchenchenchenchen

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_38004638/article/details/96590483

API

ZooKeeper API 中,有两个包是我们经常打交道的,分别是 org.apache.zookeeper, org.apache.zookeeper.data 。前一个包提供了一些API操作zk,例如对节点node增删改查,后一个包定义了一些实体类,例如对zk 节点进行权限控制的ACL类、Id类等。zk常用的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)

connectString: zk的url sessionTimeout: session的超时时间 watcher: zookeeper实例的状态监视器,由于zk的创建过程是异步的,这里可以通过注册一个监视器,监听zk的状态,当状态变为 SyncConnected 后,即表示已经连接成功。

创建节点Node

String create(final String path, byte data[], List<ACL> acl, CreateMode createMode) //同步方式 create(final String path, byte data[], List<ACL> acl, CreateMode createMode, StringCallback cb, Object ctx) //异步方式创建节点

删除节点

delete(final String path, int version) //同步方式 delete(final String path, int version, VoidCallback cb, Object ctx) //异步方式 path:路径 version:期望版本号,相当于数据库的乐观锁,在node里面存放着状态信息stat,里面存放有版本号version,如果设置的期待版本号与节点里的不相同,会操作节点失败。当版本号设置为-1时,忽略节点的版本号。

获取节点:int version =zooKeeper.exists(path, null).getVersion();

获取子节点

public List<String> getChildren(String path, boolean watch) //同步 List<String> getChildren(final String path, Watcher watcher) //同步 public void getChildren(String path, boolean watch, Children2Callback cb,Object ctx) //异步

watcher:观察节点的变化,包括节点的删除,子节点的创建、删除。需要注意的是,watcher是个一次性的东西,当它被回调的时候,将会从节点中删除,所以如果要一致监控该节点,需要反复注册watcher。 getChildren返回的子节点路径是路径名,不是全路径,例如节点路径是/node,子节点的路径是/node/child,通过节点 getChildren 获取的路径是 child。

更新节点数据

public Stat setData(final String path, byte data[], int version) //同步 public void setData(final String path, byte data[], int version, StatCallback cb, Object ctx) //异步 version:与文章 删除节点 里的version一致,获取节点:int version =zooKeeper.exists(path, null).getVersion(); cb:异步回调接口

获取节点数据

public byte[] getData(final String path, Watcher watcher, Stat stat) //同步 public void getData(String path, boolean watch, DataCallback cb, Object ctx) // 异步

watcher:当节点的数据发生变化时回调,也是一次性的 stat:如果需要获取节点的状态信息,传一个对象

判断节点是否存在

public Stat exists(final String path, Watcher watcher) public void exists(final String path, Watcher watcher, StatCallback cb, Object ctx) watcher:可以监听子节点的创建、删除,和节点的数据更新

Zookeeper基础命令操作

https://my.oschina.net/merryyou/blog/1823428

ZooKeeper四字命令

https://www.cnblogs.com/kuku0223/p/8428341.html

conf is not executed because it is not in the whitelist 使用四字命令报错

进入zookeeper的zoo.cfg,修改

#开启四字命令 4lw.commands.whitelist=*

报错

连接报错

KeeperErrorCode = ConnectionLoss for /节点路径 连接失败,一般是由于连接还未完成就执行zookeeper的get/create/exsit操作引起的

增加连接时长 ZooKeeper zk = new ZooKeeper("10.0.0.11:2181", 15000, null);

增加maxWaitTime,maxSleepTime

关闭防火墙

KeeperErrorCode = Unimplemented for /节点路径 使用Curator时报错,原因是因为版本问题

Curator官网的声明:http://curator.apache.org/ The are currently two released versions of Curator, 2.x.x and 3.x.x:

Curator 2.x.x - compatible with both ZooKeeper 3.4.x and ZooKeeper 3.5.x Curator 3.x.x - compatible only with ZooKeeper 3.5.x and includes support for new features such as dynamic reconfiguration, etc.

ZooKeeper 3.5.x

使用Curator4.0.0

Zookeeper3.4.X

使用Curator2.X,如2.12.0

Curator4.0在软兼容模式下支持Zookeeper3.4.X,但是需要依赖排除zookeeper。同时必须加入Zookeeper3.4.X的依赖,并且呢,因为是软兼容模式,一些3.4.X不具备的新特性是不能使用的。(不建议)

<dependency>

<groupId>org.apache.curator</groupId>

<artifactId>curator-recipes</artifactId>

<version>${curator-version}</version>

<exclusions>

<exclusion>

<groupId>org.apache.zookeeper</groupId>

<artifactId>zookeeper</artifactId>

</exclusion>

</exclusions>

</dependency>

Connection refused: no further information

查询节点报错

Authentication is not valid KeeperErrorCode = NoAuth for

创建节点报错

KeeperErrorCode = NodeExists for /节点路径 节点路径已存在

KeeperErrorCode = NoNode for /节点路径 节点路径不存在

在每次新建一个节点时,一定要判断该节点(路径)是否存在,因为在ZooKeeper中路径使唯一的,所以当在该路径下已有节点时,继续往当前路径上新建节点就会报这个错

更新报错

KeeperErrorCode = BadVersion for /节点路径 更新操作中版本号错误

更新操作前,先获取当前需要更新的版本号

Stat stat = zooKeeper.exists(path, null);

int version = stat.getVersion();

删除节点报错

Node not empty

The command 'rmr' has been deprecated. Please use 'deleteall' instead.

Authentication is not valid : / 没有权限操作

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年07月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
回车不是换行,发错了几条消息。。。 想请教一下 为什么KeeperErrorCode = NoNode for /节点路径 是创建节点时报错
回车不是换行,发错了几条消息。。。 想请教一下 为什么KeeperErrorCode = NoNode for /节点路径 是创建节点时报错
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
zookeeper-3. java操作z
1. 创建会话方法:客户端可以通过创建一个zookeeper实例来连接zookeeper服务器。
py3study
2020/01/07
7300
Zookeeper Java API
本文主要讲解使用Java API来和Zookeeper集群进行交互,大家在看完这篇文章以后一定要亲自动手去敲代码(纸上得来终觉浅,绝知此事要躬行)。下面介绍的API依赖的maven版本为:
shysh95
2019/07/24
5830
ZooKeeper Java API
ZooKeeper API 的核心部分是 ZooKeeper 类。在构造函数中提供一些参数来连接 ZooKeeper,并提供如下方法:
smartsi
2019/11/26
2K0
Zookeeper 操作练习
与ZooKeeper集合进行交互的应用程序称为 ZooKeeper客户端或简称客户端。 Znode是ZooKeeper集合的核心组件,ZooKeeper API提供了一小组方法使用ZooKeeper集合来操纵znode的所有细节。
名字是乱打的
2021/12/22
3240
Zookeeper 操作练习
【ZooKeeper系列】2.用Java实现ZooKeeper API的调用
在前一篇我们介绍了ZooKeeper单机版、伪集群和集群环境搭建,通过命令行的方式做了节点的创建、删除、更新、获取节点信息的测试。Zookeeper 的目的是为客户端构建复杂的协调功能提供简单、高效的核心 API,这一篇我们用Java通过ZooKeeper提供的API接口来实现这些增删改查的功能。
猿人谷
2020/06/19
1.9K0
【Zookeeper的客户端使用和集群特性】
项目构建 zookeeper 官方的客户端没有和服务端代码分离,他们为同一个jar 文件,所以我们直接引入zookeeper的maven即可, 这里版本请保持与服务端版本一致,不然会有很多兼容性的问题
Java廖志伟
2022/03/07
9720
【Zookeeper的客户端使用和集群特性】
ZooKeeper入门,看这篇就够了
在很多时候,我们都可以在各种框架应用中看到ZooKeeper的身影,比如Kafka中间件,Dubbo框架,Hadoop等等。为什么到处都看到ZooKeeper?
java技术爱好者
2020/09/22
9970
ZooKeeper入门,看这篇就够了
使用ZooKeeper提供的原生Java API操作ZooKeeper节点
我们先来创建一个普通的maven工程,然后在pom.xml文件中配置zookeeper依赖:
端碗吹水
2020/09/23
1.4K0
Apache ZooKeeper - 使用原生的API操作ZK
前面几篇系列博文我们熟悉了如何通过命令来操作ZK节点数据,下面我们来看下如何使用API来操作
小小工匠
2021/08/17
4420
zookeeper javaApi 事件监听
Watcher 监听机制是 Zookeeper 中非常重要的特性,我们基于 zookeeper 上创建的节点,可以对这些节点绑定监听 事件,比如可以监听节点数据变更、节点删除、子节点状态变更等事件,通过这个事件机制,可以基于 zookeeper 实现分布式锁、集群管理等功能 watcher 特性:当数据发生变化的时候, zookeeper 会产生一个 watcher 事件,并且会发送到客户端。但是客户端 只会收到一次通知。如果后续这个节点再次发生变化,那么之前设置 watcher 的客户端不会再次收到消息。(watcher 是一次性的操作)。 可以通过循环监听去达到永久监听效果
周杰伦本人
2022/10/25
1.2K0
ZooKeeper快速入门系列(6) | Zookeeper的API操作
需要在项目的src/main/resources目录下,新建一个文件,命名为“log4j.properties”,在文件中填入。
不温卜火
2020/10/28
4600
ZooKeeper入门(二):ZooKeeper常用命令介绍及使用Curator客户端实现分布式配置中心
在上一篇文章中ZooKeeper入门一给大家介绍了分布式协调中间件ZooKeeper的下载安装以及集群的搭建,那么本篇文章我们就来继续介绍一下ZooKeeper的一些需要补充的重要概念、客户端的常用命令以及业界操作ZooKeeper的高度封装的客户端CuratorFramework,并使用它实现一个自定义的分布式配置中心。下面进入正文。
用户3587585
2022/09/21
2.5K0
ZooKeeper入门(二):ZooKeeper常用命令介绍及使用Curator客户端实现分布式配置中心
zookeeper使用
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
5730
Zookeeper04之javaAPI的使用
  本文主要介绍下zookeeper的javaAPI的使用,zookeeper的安装操作及命令不清楚的可参考前面文章
用户4919348
2019/04/02
5830
Zookeeper04之javaAPI的使用
Zookeeper入门
导读 Zookeeper 相信大家都听说过,最典型的使用就是作为服务注册中心。今天陈某带大家从零基础入门 Zookeeper,看了本文,你将会对 Zookeeper 有了初步的了解和认识。 注意:本文基于 Zookeeper 的版本是 3.4.14,最新版本的在使用上会有一些出入,但是企业现在使用的大部分都是 3.4x 版本的。 Zookeeper 概述 Zookeeper 是一个分布式协调服务的开源框架。主要用来解决分布式集群中应用系统的一致性问题,例如怎样避免同时操作同一数据造成脏读的问题。 ZooKe
爱撒谎的男孩
2020/04/21
1.8K0
Zookeeper节点知识点整理
(1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为 LOOKING;
大忽悠爱学习
2021/12/07
4780
Zookeeper节点知识点整理
Apache Curator操作zookeeper的API使用
配置完依赖后,我们就可以来写一个简单的demo测试与zookeeper服务端的连接。代码如下:
端碗吹水
2020/09/23
1.1K0
Apache Curator操作zookeeper的API使用
ZooKeeper常用API命令
ZooKeeper Java 代码主要使用 org.apache.zookeeper.ZooKeeper 这个类使用 ZooKeeper 服务。
微观技术
2020/08/20
5520
Zookeeper客户端API之读取子节点列表(八)
本篇博客介绍一下Zookeeper原生客户端API提供的获取子节点列表方法。 获取子节点列表方法 方法 Zookeeper原生客户端API提供了以下8中获取子节点列表的方法,每个方法的使用说明参考注释
程序新视界
2018/01/08
2K0
5 java操作zookeeper
用户7630333
2023/12/07
1380
5  java操作zookeeper
相关推荐
zookeeper-3. java操作z
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档