原文:
http://www.cnblogs.com/haippy/archive/2012/07/19/2600032.html
简介
Apache Zookeeper 是由 Apache Hadoop 的 Zookeeper 子项目发展而来,现在已经成为了 Apache 的顶级项目。Zookeeper 为分布式系统提供了高效可靠且易于使用的协同服务,它可以为分布式应用提供相当多的服务,诸如统一命名服务,配置管理,状态同步和组服务等。 Zookeeper 接口简单,开发人员不必过多地纠结在分布式系统编程难于处理的同步和一致性问题上,你可以使用 Zookeeper 提供的现成(off-the-shelf)服务来实现分布式系统的配置管理,组管理,Leader 选举等功能。
Zookeeper 维护了大规模分布式系统中的常用对象,比如配置信息,层次化命名空间等,本文将从开发者的角度详细介绍 Zookeeper 的配置信息的意义以及 Zookeeper 的典型应用场景(配置文件的管理、集群管理、分布式队列、同步锁、Leader 选举、队列管理等)。
上一篇博客主要讲了 Apache Zookeeper 的安装与配置,本文主要介绍 Zookeeper Java API。
Zookeeper 提供了原生的Java API,另外还有C调用接口,本文暂不介绍Zookeeper 的 C API。
Zookeeper Java API
Zookeeper 作为一个分布式服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。
Zookeeper 客户端在连接 Zookeeper 服务器需要实例化一个org.apache.zookeeper.ZooKeeper对象,然后调用该类提供的接口与Zookeeper服务器进行交互。如果不指明,该类的所有方法均是线程安全的。
一旦 Zookeeper 客户端与服务器建立连接,客户端就会被分配一个会话ID(session ID),客户端会定期向服务器端发送心跳以保持该会话有效。只要客户端会话有效,应用程序可以调用Zookeeper客户端的接口与服务器端进行交互。
下表主要介绍了org.apache.zookeeper. ZooKeeper 方法(该表摘自IBM Developerworks:分布式服务框架 Zookeeper -- 管理分布式环境中的数据)
方法名 | 方法功能描述 |
String create(String path, byte[] data, List<ACL> acl, CreateMode createMode) | 创建一个给定的目录节点 path, 并给它设置数据,CreateMode 标 识有四种形式的目录节点,分别是 PERSISTENT:持久化目录节点,这个目录节点存储的数据不会丢失;PERSISTENT_SEQUENTIAL:顺序自动编号的目录节点,这种目 录节点会根据当前已近存在的节点数自动加 1,然后返回给客户端已经成功创建的目录节点名;EPHEMERAL:临时目录节点,一旦创建这个节点的客户端与服务器端口也就是 session 超时,这种节点会被自动删除;EPHEMERAL_SEQUENTIAL:临时自动编号节点。 |
Stat exists(String path,boolean watch) | 判断某个 path 是否存在,并设置是否监控这个目录节点,这里的 watcher 是在创建 ZooKeeper 实例时指定的 watcher,exists方法还有一个重载方法,可以指定特定的watcher。 |
Stat exists(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 监控子节点的状态。 |
Stat setData(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) | 客户端将自己的授权信息提交给服务器,服务器将根据这个授权信息验证客户端的访问权限。 |
Stat setACL(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 说明。 |
下面给出Java API 的基本操作:
// 创建一个与服务器的连接
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();
分享到:
相关推荐
标签:apache、zookeeper、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心...
zookeeper-api基础java案例.zipzookeeper-api基础java案例.zipzookeeper-api基础java案例.zipzookeeper-api基础java案例.zipzookeeper-api基础java案例.zipzookeeper-api基础java案例.zipzookeeper-api基础java案例....
标签:apache、zookeeper、twill、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...
标签:apache、zookeeper、twill、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...
标签:apache、zookeeper、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...
标签:apache、zookeeper、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心...
标签:apache、zookeeper、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...
标签:apache、zookeeper、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...
标签:apache、zookeeper、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...
4. **API集成**:Java、Python、C等语言都提供了与Zookeeper交互的API,方便在应用中使用。 **Zookeeper 3.5.7 版本的改进:** - 性能优化:针对读写操作进行了性能提升,尤其是在高并发场景下。 - 错误修复:修复...
- C API:对于非Java语言的支持,Zookeeper也提供了C语言的API。 7. **Zookeeper的版本特性**: - Zookeeper 3.7.0引入了更多的性能优化,比如更快的数据同步和更高的吞吐量。 - 错误处理和稳定性得到了增强,...
slf4j-api-1.7.25.jar slf4j-api-1.7.25.jar slf4j-api-1.7.25.jar slf4j-api-1.7.25.jar
ZooKeeper 的 API 包含了 Java 和 C 语言版本,方便不同语言的开发。此外,它还与其他开源项目如 Hadoop、Kafka、HBase 等有紧密集成,这些项目都利用 ZooKeeper 实现了关键的协调和管理功能。 总结来说,Apache ...
ZooKeeper 提供了丰富的 Java API,包括创建、读取、更新和删除 ZNode,以及监视(watch)机制。监视器可以在节点状态变化时触发事件,实现异步通知。 4. **会话(Session)** 客户端与 ZooKeeper 服务器之间的...
4. docs:文档资料,包括用户指南、API 文档等,对于初学者理解 Zookeeper 功能和用法非常有帮助。 5. src:源代码目录,如果你需要深入理解 Zookeeper 内部工作原理或者进行定制开发,可以查阅这里的代码。 6. lib...
在Java环境中,Curator是一个优秀的Zookeeper客户端库,简化了与Zookeeper的交互,包括服务注册与发现。本文将深入探讨如何利用Curator实现这一功能。 首先,Curator提供了一套完整的API来抽象服务注册与发现,包括...
这个JAR包包含了运行Zookeeper服务所需的所有Java类和资源,使得开发人员可以在Java环境中直接引用,实现与Zookeeper的交互。Zookeeper的API设计简洁明了,提供了创建、删除、更新和查询ZNode(Zookeeper中的数据...
这个版本的Zookeeper支持多种客户端API,包括Java、C、Python等,方便各种语言的开发人员进行集成。 在实际应用中,Zookeeper被广泛用于如HBase、Kafka、YARN等分布式系统中,它们依赖Zookeeper来实现节点的发现、...
2. **客户端操作**:使用命令行客户端`zkCli.sh`,或者集成到Java应用程序中,通过ZooKeeper的Java API进行数据操作。 3. **监控与维护**:可以通过ZooKeeper提供的JMX接口进行性能监控,以及定期检查日志,确保...
总结来说,Zookeeper-3.4.8是一个强大的分布式协调服务,其安装包中的`zookeeper-3.4.8.jar`和`slf4j-api-1.6.1.jar`是运行和管理Zookeeper所必需的。通过理解和掌握Zookeeper的工作原理及其配置,开发者可以有效地...