Zookeeper Java 类库介绍

在 zookeeper 客户端类库中的 org.apache.zookeeper.ZooKeeper 类是客户类库的主类。如果要使用 zookeeper 服务,应用程序必须首先实例化一个 org.apache.zookeeper.ZooKeeper 类对象。对 zookeeper 所有的操作都将通过调用 ZooKeeper 类的方法来完成。

注意:除非另有说明,org.apache.zookeeper.ZooKeeper 类的方法都是线程安全的。

一旦与 zookeeper 服务器建立连接,就会为客户端分配一个会话 ID(Session ID)。客户端将定期向服务器发送心跳信息,以保持会话有效。

只要客户端的会话 ID 仍然有效,应用程序就可以通过客户端调用 ZooKeeper API。

如果由于某种原因,客户端长时间(例如超过 sessionTimeout 值)无法向服务器发送心跳,服务器将使会话过期,会话 ID 也将失效。客户端对象将不再可用。要调用 ZooKeeper API,应用程序必须创建一个新的客户端对象。

如果客户端当前连接的 zookeeper 服务器出现故障或没有响应,客户端会在会话 ID 过期前自动尝试连接其他 zookeeper 服务器。如果连接成功,应用程序就可以继续使用客户端。

ZooKeeper API 方法分为同步和异步两种。同步方法会阻塞,直到服务器做出响应。异步方法只是排队发送请求,并立即返回。它们会接收一个回调对象,该对象会在请求成功执行或出错时被执行,并以适当的返回代码(rc)表示错误。

一些成功的 ZooKeeper API 调用会在 ZooKeeper 服务器的 “数据节点” 上留下监视(Watch)。其他成功的 ZooKeeper API 调用会触发这些监视(Watch)。一旦监视(Watch)被触发,一个事件就会发送到最初注册监视(Watch)的客户端。每个监视(Watch)只能触发一次。因此,客户端每离开一个观察点,就会收到一个事件。

客户端需要一个实现监视器接口(org.apache.zookeeper.Watcher)的类对象来处理发送到客户端的事件。当客户端放弃当前连接并重新连接服务器时,所有现有的监视器都会被视为已触发,但未交付的事件会丢失。为了模拟这种情况,客户端将生成一个特殊事件,告诉事件处理程序连接已中断。该特殊事件的类型为 EventNone,状态为 sKeeperStateDisconnected。

下面是 org.apache.zookeeper.ZooKeeper 类的一些重要方法和功能:

  • create() 方法:用于在 ZooKeeper 上创建一个新的 ZNode。可以指定 ZNode 的路径、数据、ACL(访问控制列表)、创建模式等参数。

  • getData() 方法:用于从指定的 ZNode 中读取数据。

  • setData() 方法:用于更新指定的 ZNode 中的数据。

  • delete() 方法:用于删除指定的 ZNode。

  • exists() 方法:用于检查指定的 ZNode 是否存在。

  • getChildren() 方法:用于获取指定 ZNode 的子节点列表。

  • addAuthInfo() 方法:用于向 ZooKeeper 会话添加认证信息。

  • close() 方法:用于关闭到 ZooKeeper 服务器的连接。

除了这些方法之外,ZooKeeper 类还提供了一些其他辅助方法,用于处理 ZooKeeper 事件、管理会话等。

其他类或接口/枚举

Watcher 接口

Watcher 接口定义了 ZooKeeper 事件的处理方式,当 ZooKeeper 中的数据发生变化时,客户端可以通过注册 Watcher 来接收相应的通知。

Watcher.Event.EventType

Watcher.Event.EventType 是 ZooKeeper 中 Watcher 事件的类型枚举。EventType 枚举定义了 Watcher 事件的类型,用于标识不同类型的 ZooKeeper 事件。EventType 枚举包含以下几种 Watcher 事件类型:

  • NodeCreated:节点创建事件,表示 ZNode 被创建。

  • NodeDeleted:节点删除事件,表示 ZNode 被删除。

  • NodeDataChanged:节点数据变更事件,表示 ZNode 的数据被修改。

  • NodeChildrenChanged:子节点变更事件,表示 ZNode 的子节点列表发生变化。

Watcher.Event.KeeperState

Watcher.Event.KeeperState 是 ZooKeeper 中 Watcher 事件的状态枚举。KeeperState 枚举定义了 Watcher 事件的状态,用于标识不同类型的 ZooKeeper 连接状态。

KeeperState 枚举包含以下几种 Watcher 事件状态:

  • Disconnected:表示客户端与ZooKeeper服务器的连接已断开。

  • SyncConnected:表示客户端与ZooKeeper服务器已建立同步连接。

  • AuthFailed:表示客户端与ZooKeeper服务器的身份验证失败。

  • ConnectedReadOnly:表示客户端与ZooKeeper服务器建立了只读连接。

  • SaslAuthenticated:表示客户端使用SASL身份验证成功。

  • Expired:表示会话超时,客户端与ZooKeeper服务器的会话已过期。

ZooDefs 类

ZooDefs 是 ZooKeeper Java 客户端库中的一个类,它包含了一些常量和枚举类型,用于定义 ZooKeeper 中的一些常用属性和特性。这些属性和特性包括 ZNode 的创建模式、ACL(访问控制列表)以及一些与 ZooKeeper 事件相关的常量。

ZooDefs 类中包含了以下一些重要的属性和枚举类型:

  • Ids 内部类:定义了一些常见的 ACL 模式和 ID 标识符,用于创建 ACL 对象。例如,OPEN_ACL_UNSAFE 用于表示完全开放的 ACL,READ_ACL_UNSAFE 用于表示只读的 ACL。

  • Perms 枚举:定义了 ZooKeeper 中的权限类型,包括READ(读取权限)、WRITE(写入权限)、CREATE(创建权限)、DELETE(删除权限)、ADMIN(管理权限)等。

CreateMode 枚举

CreateMode 是 ZooKeeper Java 客户端库中的一个枚举类型,用于定义 ZNode 的创建模式。在 ZooKeeper 中,每个 ZNode 都可以使用不同的创建模式来定义其持久性和顺序性。

CreateMode 枚举定义了以下几种 ZNode 的创建模式:

  • PERSISTENT:持久节点。创建后的ZNode将一直存在于ZooKeeper中,直到被显式删除。

  • PERSISTENT_SEQUENTIAL:持久顺序节点。与持久节点类似,但是会为ZNode的名称自动添加一个序列号后缀。

  • EPHEMERAL:临时节点。创建后的ZNode将随着客户端会话的结束而被删除,适用于临时状态信息的存储。

  • EPHEMERAL_SEQUENTIAL:临时顺序节点。与临时节点类似,但是会为ZNode的名称自动添加一个序列号后缀。

注意,开发人员可以根据应用程序的需求选择适当的创建模式来创建 ZNode,以实现不同的数据存储和节点生命周期管理策略。通过使用 CreateMode 枚举,可以方便地指定 ZNode 的创建方式,而不必手动编写逻辑来处理节点的顺序性和持久性。

AsyncCallback 接口

AsyncCallback 接口是 ZooKeeper Java 客户端库中的一个重要接口,用于在异步 ZooKeeper 操作完成时接收通知和处理结果。该接口定义了一系列内部回调接口,用于处理异步ZooKeeper 操作的成功和失败情况。

AsyncCallback 接口包含以下几个重要的回调内部接口:

  • AsyncCallback.MultiCallback  用于处理有多个结果的回调

  • AsyncCallback.VoidCallback  空回调,不会返回任何数据

  • AsyncCallback.StringCallback  只返回节点的名称

  • AsyncCallback.Children2Callback  用于获取节点的子节点和状态

  • AsyncCallback.ChildrenCallback  用于获取节点的子节点

  • AsyncCallback.ACLCallback  用于获取节点的ACL和状态

  • AsyncCallback.DataCallback  用于获取节点的数据和状态

  • AsyncCallback.StatCallback  用于获取节点的状态

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号