Zookeeper原生Java API、ZKClient和Apache Curator对比

zookeeper 常用的3种java客户端:

  • zookeeper原生Java API
  • ZkClient
  • Apache curator

1、zookeeper原生Java API

Zookeeper客户端提供了基本的操作,比如,创建会话、创建节点、读取节点、更新数据、删除节点和检查节点是否存在等。但对于开发人员来说,Zookeeper提供的基本操纵还是有一些不足之处。

Zookeeper API不足之处

(1)Session超时之后没有实现重连机制,需要手动操作;
(2)Watcher注册是一次性的,每次触发之后都需要重新进行注册;
(3)不支持递归创建节点;
(4)异常处理繁琐,Zookeeper提供了很多异常,对于开发人员来说可能根本不知道该如何处理这些异常信息;
(5)只提供了简单的byte[]数组的接口,没有提供针对对象级别的序列化;
(6)创建节点时如果节点存在抛出异常,需要自行检查节点是否存在;
(7)删除节点无法实现级联删除;

基于以上原因,直接使用Zookeeper原生API的人并不多。

2、ZkClient

<!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>

ZkClient是一个开源客户端,在Zookeeper原生API接口的基础上进行了包装,更便于开发人员使用。解决如下问题:

1)session会话超时重连
2)解决Watcher反复注册
3)简化API开发

虽然 ZkClient 对原生 API 进行了封装,但也有它自身的不足之处:

  • 几乎没有参考文档;
  • 异常处理简化(抛出RuntimeException);
  • 重试机制比较难用;
  • 没有提供各种使用场景的实现;

3、Apache Curator

相关依赖 参考文章: https://blog.csdn.net/xiaojin21cen/article/details/88538102

Curator是Netflix公司开源的一套Zookeeper客户端框架,和ZkClient一样,解决了非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等。目前已经成为 Apache 的顶级项目。

其特点:

  1. Apache 的开源项目
  2. 解决Watch注册一次就会失效的问题
  3. 提供一套Fluent风格的 API 更加简单易用
  4. 提供更多解决方案并且实现简单,例如:分布式锁
  5. 提供常用的ZooKeeper工具类
  6. 编程风格更舒服

除此之外,Curator中还提供了Zookeeper各种应用场景(Recipe,如共享锁服务、Master选举机制和分布式计算器等)的抽象封装。

猜你喜欢

转载自blog.csdn.net/weixin_42073629/article/details/115223215