Zookeeper的Shell 客户端操作和zookeeper java api 代码

2021-04-09 14:26:09 浏览数 (1)

Zookeeper的Shell 客户端操作和zookeeper java api 代码

    • Zookeeper的Shell 客户端操作
    • ZooKeeper Java API
    • zookeeper选举机制

Zookeeper的Shell 客户端操作

代码语言:javascript复制
运行 zkCli.sh –server ip:2181 

命令 说明 参数

代码语言:javascript复制
create [-s] [-e] path 
data acl
创建Znode
-s 指定是顺序节
点
-e 指定是临时节
点
ls path [watch] 列出Path下所有子Znode
get path [watch] 获取Path对应的Znode的数据和属性
ls2 path [watch] 查看Path下所有子Znode以及子

Znode的属性

代码语言:javascript复制
set path data 
[version]

更新节点 version 数据版本

代码语言:javascript复制
delete path 
[version]

删除节点, 如果要删除的节点有子 Znode则无法删除 version 数据版本

代码语言:javascript复制
rmr path

删除节点, 如果有子Znode则递归删 除

代码语言:javascript复制
setquota -n|-b val 
path

修改Znode配额

代码语言:javascript复制
-n 设置子节点最
大个数
-b 设置节点数据
最大长度
history 列出历史记录

1:创建普通节点

代码语言:javascript复制
create /app1 hello

2: 创建顺序节点

代码语言:javascript复制
create -s /app3 world

3:创建临时节点

代码语言:javascript复制
create -e /tempnode world

4:创建顺序的临时节点

代码语言:javascript复制
create -s -e /tempnode2 aaa

5:获取节点数据

代码语言:javascript复制
get /app1

6:修改节点数据

代码语言:javascript复制
set /app1 xxx

7:删除节点

代码语言:javascript复制
delete /app1 删除的节点不能有子节点
rmr /app1 递归删除

ZooKeeper Java API

org.apache.zookeeper.Zookeeper Zookeeper 是在Java中客户端主类,负责建立与zookeeper集群的会话,并提供方法进行操作。 org.apache.zookeeper.Watcher Watcher接口表示一个标准的事件处理器,其定义了事件通知相关的逻辑,包含KeeperState和EventType两个枚举类,分别代表了通知状态和事件类型,同时定义了事件的回调方法:process(WatchedEvent event)。 process方法是Watcher接口中的一个回调方法,当ZooKeeper向客户端发送一个Watcher事件通知时,客户端就会对相应的process方法进行回调,从而实现对事件的处理。 基本使用 建立java maven项目,引入maven pom坐标。

代码语言:javascript复制
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.9</version>
</dependency>
代码语言:javascript复制
public static void main(String[] args) throws Exception {
        // 初始化 ZooKeeper实例(zk地址、会话超时时间,与系统默认一致、watcher)
        ZooKeeper zk = new ZooKeeper("node-1:2181,node-2:2181", 30000, new Watcher() {
            @Override
            public void process(WatchedEvent event) {
                System.out.println("事件类型为:"   event.getType());
                System.out.println("事件发生的路径:"   event.getPath());
                System.out.println("通知状态为:"  event.getState());
            }
        });
	zk.create("/myGirls", "性感的".getBytes("UTF-8"), Ids.OPEN_ACL_UNSAFE,
		 CreateMode.PERSISTENT);
      zk.close();


更多操作示例
public static void main(String[] args) throws Exception {
        // 初始化 ZooKeeper实例(zk地址、会话超时时间,与系统默认一致、watcher)
        ZooKeeper zk = new ZooKeeper("node-21:2181,node-22:2181", 30000, new Watcher() {
            @Override
            public void process(WatchedEvent event) {
                System.out.println("事件类型为:"   event.getType());
                System.out.println("事件发生的路径:"   event.getPath());
                System.out.println("通知状态为:"  event.getState());
            }
        });
    // 创建一个目录节点
 zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE,
   CreateMode.PERSISTENT); 
 // 创建一个子目录节点
 zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(),
   Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); 
 System.out.println(new String(zk.getData("/testRootPath",false,null))); 
 // 取出子目录节点列表
 System.out.println(zk.getChildren("/testRootPath",true)); 
 // 修改子目录节点数据
 zk.setData("/testRootPath/testChildPathOne","modifyChildDataOne".getBytes(),-1); 
 System.out.println("目录节点状态:[" zk.exists("/testRootPath",true) "]"); 
 // 创建另外一个子目录节点
 zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(), 
   Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); 
 System.out.println(new String(zk.getData("/testRootPath/testChildPathTwo",true,null))); 
 // 删除子目录节点
 zk.delete("/testRootPath/testChildPathTwo",-1); 
 zk.delete("/testRootPath/testChildPathOne",-1); 
 // 删除父目录节点
 zk.delete("/testRootPath",-1);
 zk.close();
}

zookeeper选举机制

0 人点赞