15. 使用Apache Curator管理ZooKeeper

Apache ZooKeeper是为了帮助解决复杂问题的软件工具,它可以帮助用户从复杂的实现中解救出来。 然而,ZooKeeper只暴露了原语,这取决于用户如何使用这些原语来解决应用程序中的协调问题。 社区已经在ZooKeeper数据模型及其API之上开发了高级框架。 Apache Curator是一个高级的包装类库和框架,使得ZooKeeper非常简单易用。

Tips
Curator最初由Netflix开发,现在是一个Apache项目。 项目页面位于。

一 Curator组件

Curator是ZooKeeper的高级类库;它使处理ZooKeeper变得更容易,并扩展了核心ZooKeeper的功能。 Curator在高层次上由以下部分组成:

Client:Curator客户端是ZooKeeper的Java客户端的一个包装器。 它是Curator堆栈中的一个低级API,并且抽象出ZooKeeper客户端的功能。

Framework:Curator框架是一个具有高级功能的高级API,如自动连接管理,操作重试等等。 它在很大程度上简化了ZooKeeper的使用。

Recipe:Curator Recipe提供ZooKeeper Recipe的实现; 这些实现可以直接用于分布式应用程序来解决协调问题。

Extensions:Curator Recipe包实现了常见的Recipe。 为了避免这个包的膨胀,使用一个单独的扩展包。

除了前面的组件外,Curator还附带一些ZooKeeper有用的工具。 Curator堆栈如下图所示:

The Curator stack

Curator JARs可以在Maven Central的仓库中找到。 Curator可以很容易地包含在Maven,Gradle,Ivy,SBT等构建脚本中。

各种Maven artifacts在上列出。

二 Curator客户端

Curator Client是ZooKeeper Java客户端的一个包装器。它使客户端访问ZooKeeper更简单,更不易出错。

Curator客户端提供以下功能:

连接管理:管理与ZooKeeper服务器的连接

操作重试实用程序:这是重试操作的机制

测试ZooKeeper服务器:这是用于测试ZooKeeper服务器

使用Curator客户端连接ZooKeeper服务器的MyCuratorClient.java的代码片段如下:

public void myCuratorClient() throws Exception { CuratorZookeeperClient client = new CuratorZookeeperClient(server.getConnectString(), 10000, 10000, null,new RetryOneTime(1)); client.start(); try { client.blockUntilConnectedOrTimedOut(); String path = client.getZooKeeper().create("/test_znode", "".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } finally { client.close(); } }

CuratorZooKeeperClient构造方法用于连接到ZooKeeper服务器。 它需要连接字符串或ZooKeeper主机端口对列表,会话和连接超时时间,可选的观察器对象以及要使用的重试策略。 重试策略是客户端在重试连接时尝试各种重试机制的机制。在前面的例子中,使用了一个客户端只会重试一次的策略。

Curator客户端支持以下重试策略:

BoundedExponentialBackoffRetry:通过增加重试之间的休眠时间直到最大上限重试指定的次数

ExponentialBackoffRetry:通过增加重试之间的休眠时间来重试指定的次数

RetryNTimes:重试n次

RetryOneTime:只重试一次

RetryUntilElapsed:一直重试,直到超过指定时间

一旦客户端启动,blockUntilConnectedOrTimedOut方法直到ZooKeeper连接服务器成功或者连接超时。连接成功之后,创建/testznode的znode。getZooKeeper()方法将连接的实例返回给托管的ZooKeeper服务器。

Note
Curator API文档可在察看。

Curator客户端是一个低层次的API,它提供了对管理员客户端API的抽象。开发人员应该使用Curator框架,而不是直接在他们的应用程序中使用CuratorZookeeperClient类作为最佳实践。

三 Curator框架

Curator框架(org.apache.curator.framework)是一个高层次的API,很大程度上简化了ZooKeeper的使用。 它提供的一些功能如下:

自动连接管理:此功能自动且透明地处理客户端需要重新建立与ZooKeeper服务器的连接和/或重试操作的场景。

简单而灵活的API:使用一组新式且流畅的接口来应用ZooKeeper原始的API。

Recipe:这个功能实现了常见的ZooKeeper Recipe。

CuratorFramework使用CuratorFrameworkFactory进行分配。 它提供了工厂方法以及构造器创建实例。CuratorFramework实例完全是线程安全的。在使用CuratorFramework开发应用程序时,开发人员应该为每个ZooKeeper集群创建和共享一个CuratorFramework实例。CuratorFramework使用fluent风格接口。

以下展示的是ZooKeeper客户端使用CuratorFramework的代码示例:

public void myCuratorFrameworkClient() throws Exception { CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1)); client.start(); try { String path = client.create().withMode( CreateMode.PERSISTENT).forPath( "/test_znode", "".getBytes()); } finally { client.close(); } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgdfj.html