Zookeeper的常用方法举例

表 1 org.apache.zookeeper. ZooKeeper 方法列表
方法名方法功能描述
Stringcreate(String path, byte[] data, List<ACL> acl,CreateMode createMode)创建一个给定的目录节点 path, 并给它设置数据,CreateMode 标识有四种形式的目录节点,分别是 PERSISTENT:持久化目录节点,这个目录节点存储的数据不会丢失;PERSISTENT_SEQUENTIAL:顺序自动编号的目录节点,这种目录节点会根据当前已近存在的节点数自动加 1,然后返回给客户端已经成功创建的目录节点名;EPHEMERAL:临时目录节点,一旦创建这个节点的客户端与服务器端口也就是 session 超时,这种节点会被自动删除;EPHEMERAL_SEQUENTIAL:临时自动编号节点
Statexists(String path, boolean watch) 判断某个 path 是否存在,并设置是否监控这个目录节点,这里的 watcher 是在创建 ZooKeeper 实例时指定的 watcher,exists方法还有一个重载方法,可以指定特定的watcher
Statexists(String path,Watcher watcher)重载方法,这里给某个目录节点设置特定的 watcher,Watcher 在 ZooKeeper 是一个核心功能,Watcher 可以监控目录节点的数据变化以及子目录的变化,一旦这些状态发生变化,服务器就会通知所有设置在这个目录节点上的 Watcher,从而每个客户端都很快知道它所关注的目录节点的状态发生变化,而做出相应的反应
void delete(String path, int version)删除 path 对应的目录节点,version 为 -1 可以匹配任何版本,也就删除了这个目录节点所有数据
List<String>getChildren(String path, boolean watch)获取指定 path 下的所有子目录节点,同样getChildren方法也有一个重载方法可以设置特定的 watcher 监控子节点的状态
StatsetData(String path, byte[] data, int version) 给 path 设置数据,可以指定这个数据的版本号,如果 version 为 -1 怎可以匹配任何版本
byte[] getData(String path, boolean watch,Stat stat)获取这个 path 对应的目录节点存储的数据,数据的版本等信息可以通过 stat 来指定,同时还可以设置是否监控这个目录节点数据的状态
void addAuthInfo(String scheme, byte[] auth)客户端将自己的授权信息提交给服务器,服务器将根据这个授权信息验证客户端的访问权限。
StatsetACL(String path,List<ACL> acl, int version)给某个目录节点重新设置访问权限,需要注意的是 Zookeeper 中的目录节点权限不具有传递性,父目录节点的权限不能传递给子目录节点。目录节点 ACL 由两部分组成:perms 和 id。
Perms 有 ALL、READ、WRITE、CREATE、DELETE、ADMIN 几种
而 id 标识了访问目录节点的身份列表,默认情况下有以下两种:
ANYONE_ID_UNSAFE = new Id("world", "anyone") 和 AUTH_IDS = new Id("auth", "") 分别表示任何人都可以访问和创建者拥有访问权限。
List<ACL>getACL(String path,Stat stat)获取某个目录节点的访问权限列表

除了以上这些上表中列出的方法之外还有一些重载方法,如都提供了一个回调类的重载方法以及可以设置特定 Watcher 的重载方法,具体的方法可以参考 org.apache.zookeeper. ZooKeeper 类的 API 说明。

基本操作

下面给出基本的操作 ZooKeeper 的示例代码,这样你就能对 ZooKeeper 有直观的认识了。下面的清单包括了创建与 ZooKeeper 服务器的连接以及最基本的数据操作:


清单 2. ZooKeeper 基本的操作示例
<span style="font-size: 16px;">				
 // 创建一个与服务器的连接
ZooKeeper zk = new ZooKeeper("localhost:" + CLIENT_PORT, 
        ClientBase.CONNECTION_TIMEOUT, new Watcher() { 
            // 监控所有被触发的事件
            public void process(WatchedEvent event) { 
                System.out.println("已经触发了" + event.getType() + "事件!"); 
            } 
        }); 
 // 创建一个目录节点

 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(); 
</span>

输出的结果如下:

<span style="font-size: 16px;">已经触发了 None 事件!
 testRootData 
 [testChildPathOne] 
目录节点状态:[5,5,1281804532336,1281804532336,0,1,0,0,12,1,6] 
已经触发了 NodeChildrenChanged 事件!
 testChildDataTwo 
已经触发了 NodeDeleted 事件!
已经触发了 NodeDeleted 事件!
</span>

当对目录节点监控状态打开时,一旦目录节点的状态发生变化,Watcher 对象的 process 方法就会被调用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ZooKeeper是一个开源的分布式协调服务,用于管理和协调分布式系统中的配置信息、命名服务、分布式锁等。下面列出了一些常用ZooKeeper配置选项: 1. `tickTime`: ZooKeeper中的基本时间单位,以毫秒为单位。它用于设置心跳间隔和最小会话超时时间。默认值为2000。 2. `initLimit`: ZooKeeper服务器初始化连接时的最长时间,以tickTime的倍数表示。在此时间内,客户端将等待与ZooKeeper服务器建立初始连接。默认值为10。 3. `syncLimit`: ZooKeeper服务器之间同步的最长时间,以tickTime的倍数表示。如果这个时间超过了,ZooKeeper服务器将被认为不可达,并且将触发重新选举过程。默认值为5。 4. `dataDir`: ZooKeeper数据存储目录的路径。默认情况下,它是`/tmp/zookeeper`。 5. `clientPort`: 客户端与ZooKeeper服务器通信的端口号。默认值为2181。 6. `maxClientCnxns`: 限制每个客户端IP地址允许的最大连接数。默认值为60。 7. `autopurge.snapRetainCount`和`autopurge.purgeInterval`: 这两个选项用于配置自动清理机制。`snapRetainCount`表示要保留的快照数量,默认为3;`purgeInterval`表示清理任务的间隔时间,默认为0,表示禁用自动清理。 8. `quorumListenOnAllIPs`: 设置为true时,ZooKeeper将监听所有可用的IP地址。默认值为false。 这只是一些常见的ZooKeeper配置选项的示例,实际上还有其他更多的配置选项,可以根据具体需求进行配置。你可以在ZooKeeper的配置文件(zoo.cfg)中设置这些选项,然后启动ZooKeeper服务器。 请注意,在生产环境中,除了以上配置选项,还需要根据实际需求进行更详细的配置,例如安全认证、集群配置等。建议参考ZooKeeper官方文档以获取更全面的配置信息。 希望对你理解ZooKeeper常用配置有所帮助!如有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值