当前位置:K88软件开发文章中心大数据Zookeeper → 文章内容

Zookeeper API

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-26 10:08:51

由 xpproen 创建,youj 最后一次修改 2016-12-27 ZooKeeper有一个绑定Java和C的官方API。Zookeeper社区为大多数语言(.NET,python等)提供非官方API。使用ZooKeeper API,应用程序可以连接,交互,操作数据,协调,最后断开与ZooKeeper集合的连接。ZooKeeper API具有丰富的功能,以简单和安全的方式获得ZooKeeper集合的所有功能。ZooKeeper API提供同步和异步方法。ZooKeeper集合和ZooKeeper API在各个方面都完全相辅相成,对开发人员有很大的帮助。让我们在本章讨论Java绑定。ZooKeeper API的基础知识与ZooKeeper集合进行交互的应用程序称为 ZooKeeper客户端或简称客户端。Znode是ZooKeeper集合的核心组件,ZooKeeper API提供了一小组方法使用ZooKeeper集合来操纵znode的所有细节。客户端应该遵循以步骤,与ZooKeeper集合进行清晰和干净的交互。连接到ZooKeeper集合。ZooKeeper集合为客户端分配会话ID。定期向服务器发送心跳。否则,ZooKeeper集合将过期会话ID,客户端需要重新连接。只要会话ID处于活动状态,就可以获取/设置znode。所有任务完成后,断开与ZooKeeper集合的连接。如果客户端长时间不活动,则ZooKeeper集合将自动断开客户端。Java绑定让我们来了解本章中最重要的一组ZooKeeper API。ZooKeeper API的核心部分是ZooKeeper类。它提供了在其构造函数中连接ZooKeeper集合的选项,并具有以下方法: connect - 连接到ZooKeeper集合create- 创建znodeexists- 检查znode是否存在及其信息 getData - 从特定的znode获取数据 setData - 在特定的znode中设置数据 getChildren - 获取特定znode中的所有子节点delete - 删除特定的znode及其所有子项close - 关闭连接连接到ZooKeeper集合ZooKeeper类通过其构造函数提供connect功能。构造函数的签名如下 :ZooKeeper(String connectionString, int sessionTimeout, Watcher watcher) connectionString - ZooKeeper集合主机。 sessionTimeout - 会话超时(以毫秒为单位)。watcher - 实现“监视器”界面的对象。ZooKeeper集合通过监视器对象返回连接状态。让我们创建一个新的帮助类 ZooKeeperConnection ,并添加一个方法 connect 。 connect 方法创建一个ZooKeeper对象,连接到ZooKeeper集合,然后返回对象。这里 CountDownLatch 用于停止(等待)主进程,直到客户端与ZooKeeper集合连接。ZooKeeper集合通过监视器回调来回复连接状态。一旦客户端与ZooKeeper集合连接,监视器回调就会被调用,并且监视器回调函数调用CountDownLatch的countDown方法来释放锁,在主进程中await。以下是与ZooKeeper集合连接的完整代码。编码:ZooKeeperConnection.java// import java classesimport java.io.IOException;import java.util.concurrent.CountDownLatch;// import zookeeper classesimport org.apache.zookeeper.KeeperException;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.Watcher.Event.KeeperState;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.AsyncCallback.StatCallback;import org.apache.zookeeper.KeeperException.Code;import org.apache.zookeeper.data.Stat;public class ZooKeeperConnection { // declare zookeeper instance to access ZooKeeper ensemble private ZooKeeper zoo; final CountDownLatch connectedSignal = new CountDownLatch(1); // Method to connect zookeeper ensemble. public ZooKeeper connect(String host) throws IOException,InterruptedException { zoo = new ZooKeeper(host,5000,new Watcher() { public void process(WatchedEvent we) { if (we.getState() == KeeperState.SyncConnected) { connectedSignal.countDown(); } } }); connectedSignal.await(); return zoo; } // Method to disconnect from zookeeper server public void close() throws InterruptedException { zoo.close(); }}保存上面的代码,它将在下一节中用于连接ZooKeeper集合。创建ZnodeZooKeeper类提供了在ZooKeeper集合中创建一个新的znode的create方法。 create 方法的签名如下: create(String path, byte[] data, List<ACL> acl, CreateMode createMode)path - Znode路径。例如,/myapp1,/myapp2,/myapp1/mydata1,myapp2/mydata1/myanothersubdata data - 要存储在指定znode路径中的数据 acl - 要创建的节点的访问控制列表。ZooKeeper API提供了一个静态接口 ZooDefs.Ids 来获取一些基本的acl列表。例如,ZooDefs.Ids.OPEN_ACL_UNSAFE返回打开znode的acl列表。 createMode - 节点的类型,即临时,顺序或两者。这是一个枚举。让我们创建一个新的Java应用程序来检查ZooKeeper API的 create 功能。创建文件 ZKCreate.java 。在main方法中,创建一个类型为 ZooKeeperConnection 的对象,并调用 connect 方法连接到ZooKeeper集合。connect方法将返回ZooKeeper对象 zk 。现在,请使用自定义path和data调用 zk 对象的 create 方法。创建znode的完整程序代码如下: 编码:ZKCreate.javaimport java.io.IOException;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.Watcher.Event.KeeperState;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.KeeperException;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.ZooDefs;public class ZKCreate { // create static instance for zookeeper class. private static ZooKeeper zk; // create static instance for ZooKeeperConnection class. private static ZooKeeperConnection conn; // Method to create znode in zookeeper ensemble public static void create(String path, byte[] data) throws KeeperException,InterruptedException { zk.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE,

[1] [2] [3] [4]  下一页


Zookeeper API