zookeeper (二):Curator vs zkClient
发布日期:2021-05-06 17:50:30 浏览次数:26 分类:精选文章

本文共 2137 字,大约阅读时间需要 7 分钟。

Zookeeper Curator zkClient 客户端对比

前言

大家好,我是尼恩,目前和几个小伙伴一起组织了一个高并发实战社群【疯狂创客圈】。我们正在学习和实战一个高并发、亿级流量的IM聊天程序。前面已经完成了一个高性能的Java聊天程序的四件大事,接下来需要进入分布式开发的环节。对于Zookeeper集群,我们选择了zkClient和Curator作为客户端,以下是对这两个客户端的对比分析。


1.1 Zookeeper客户端开发

在开发Zookeeper应用时,需要使用Zookeeper的Java客户端API来连接和操作Zookeeper集群。可以选择Zookeeper官方的Java客户端API或第三方开源客户端。Zookeeper官方客户端提供了基本操作如创建会话、创建节点、读取节点、更新数据、删除节点和检查节点是否存在等。然而,这些基本操作对于开发人员来说仍有一些不足之处。

Zookeeper官方客户端的不足之处包括:

  • Watcher是一次性的:每次触发后需要重新注册Watcher,增加了开发复杂性。
  • Session超时后没有实现重连机制:在Session超时后无法自动重连,增加了系统的不稳定性。
  • 异常处理繁琐:Zookeeper提供了大量异常类型,对于开发人员来说可能难以处理。
  • 只提供byte数组接口:没有提供针对对象级别的序列化接口,限制了数据类型的使用。
  • 节点创建时需要自行检查节点是否存在:如果节点已经存在,创建操作会抛出异常。
  • 删除节点无法实现级联删除:无法在创建节点时设置级联删除机制。
  • 第三方开源客户端主要有zkClient和Curator两个框架,它们在解决上述问题方面都有所突破。


    1.1.1 ZkClient简介

    ZkClient是一个开源客户端,基于Zookeeper的原生API接口进行了包装,提供了更加简洁的API。ZkClient在一些著名互联网开源项目中得到了应用,例如阿里的分布式框架Dubbo。ZkClient解决了Zookeeper原生API的一些问题,如实现了Session超时重连、Watcher反复注册等。

    然而,ZkClient也有自身的不足之处:

  • 社区不活跃:文档不够完善,几乎没有参考文档。
  • 异常处理简化:提供的异常类型较少,多为RuntimeException。
  • 重试机制难用:对于网络波动等情况,重试机制不够友好。
  • 缺少参考实现:没有提供针对各种使用场景的参考实现。

  • 1.1.2 Curator简介

    Curator是Netflix公司开源的一款Zookeeper客户端框架,与ZkClient相比,Curator更优秀。Curator解决了Zookeeper客户端开发中的许多细节问题,包括连接重连、反复注册Watcher以及NodeExistsException异常等。Curator是Apache基金会顶级项目之一,提供了更加完善的文档,同时还支持Fluent风格的客户端API框架。

    Curator的优势体现在以下几个方面:

  • 文档完善:提供了详细的使用文档和示例代码。
  • 异常处理优化:异常类型更加丰富,便于开发人员处理。
  • 链式调用API:API设计优雅,方便调用。
  • 提供多种应用场景实现:包括共享锁服务、Master选举机制和分布式计算器等。

  • 节点创建示例对比

    以下是使用ZkClient和Curator分别创建节点的代码示例:

    ZkClient

    ZkClient client = new ZkClient("192.168.1.105:2181", 10000, 10000, new SerializableSerializer());System.out.println("connected ok!");String zkPath = "/test/node-1";Stat stat = new Stat();User u = client.readData(zkPath, stat);

    Curator

    CuratorFramework client = CuratorFrameworkFactory.newClient(    "192.168.1.105:2181",     new ExponentialBackoffRetryPolicy(10000, 10000));String zkPath = "/test/node-1";client.create().withMode(CreateMode.PERSISTENT).forPath(zkPath);

    总结

    在Zookeeper客户端选择方面,Curator的优势更加明显。虽然ZkClient在某些方面有其优势,但Curator在文档完善性、异常处理、重试机制和API设计等方面表现更优。因此,在实际开发场景中,使用Curator客户端更加推荐。


    下一篇:开启zk的客户端开发


    疯狂创客圈 亿级流量 高并发IM 实战 系列

    已发文章列表

  • Java (Netty) 聊天程序【 亿级流量】实战 开源项目实战
  • Netty 源码、原理、JAVA NIO 原理
  • Java 面试题 一网打尽
  • 疯狂创客圈
  • 上一篇:zookeeper curator CRUD
    下一篇:zookeeper curator 伪集群 - 安装 -配置 - 秒懂

    发表评论

    最新留言

    不错!
    [***.144.177.141]2025年03月29日 18时57分37秒