zookeeper(二): Curator vs zkClient
文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 :
-
免费赠送 :《尼恩Java面试宝典》持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备
-
免费赠送 经典图书:《Java高并发核心编程(卷1)》 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
-
免费赠送 经典图书:《Java高并发核心编程(卷2)》 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
-
免费赠送 经典图书:《Netty Zookeeper Redis 高并发实战》 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
-
免费赠送 经典图书:《SpringCloud Nginx高并发核心编程》 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
-
免费赠送 资源宝库: Java 必备 百度网盘资源大合集 价值>10000元 加尼恩领取
推荐:入大厂 、做架构、大力提升Java 内功 的 精彩博文
入大厂 、做架构、大力提升Java 内功 必备的精彩博文 | 秋招涨薪1W + 必备的精彩博文 |
---|---|
1:Redis 分布式锁 (图解-秒懂-史上最全) | 2:Zookeeper 分布式锁 (图解-秒懂-史上最全) |
3: Redis与MySQL双写一致性如何保证? (面试必备) | 4: 面试必备:秒杀超卖 解决方案 (史上最全) |
5:面试必备之:Reactor模式 | 6: 10分钟看懂, Java NIO 底层原理 |
7:TCP/IP(图解+秒懂+史上最全) | 8:Feign原理 (图解) |
9:DNS图解(秒懂 + 史上最全 + 高薪必备) | 10:CDN图解(秒懂 + 史上最全 + 高薪必备) |
11: 分布式事务( 图解 + 史上最全 + 吐血推荐 ) | 12:限流:计数器、漏桶、令牌桶 三大算法的原理与实战(图解+史上最全) |
13:架构必看:12306抢票系统亿级流量架构 (图解+秒懂+史上最全) |
14:seata AT模式实战(图解+秒懂+史上最全) |
15:seata 源码解读(图解+秒懂+史上最全) | 16:seata TCC模式实战(图解+秒懂+史上最全) |
SpringCloud 微服务 精彩博文 | |
---|---|
nacos 实战(史上最全) | sentinel (史上最全+入门教程) |
SpringCloud gateway (史上最全) | 分库分表sharding-jdbc底层原理与实操(史上最全,5W字长文,吐血推荐) |
推荐:尼恩Java面试宝典(持续更新 + 史上最全 + 面试必备)具体详情,请点击此链接
尼恩Java面试宝典,32个最新pdf,含2000多页,不断更新、持续迭代 具体详情,请点击此链接
zookeeper Curator zkClient 客户端对比
疯狂创客圈 Java 分布式聊天室【 亿级流量】实战系列之 -23【 博客园 总入口 】
@
写在前面
大家好,我是作者尼恩。目前和几个小伙伴一起,组织了一个高并发的实战社群【疯狂创客圈】。正在开始高并发、亿级流程的 IM 聊天程序 学习和实战
前面,已经完成一个高性能的 Java 聊天程序的四件大事:
接下来,需要进入到分布式开发的环节了。 分布式的中间件,疯狂创客圈的小伙伴们,一致的选择了zookeeper,不仅仅是由于其在大数据领域,太有名了。更重要的是,很多的著名框架,都使用了zk。
本篇介绍和对比zookeeper的两个客户端。
1.1. zookeeper应用开发
Zookeeper应用开发,需要使用Zookeeper的java 客户端API ,去连接和操作Zookeeper 集群。
可以供选择的java 客户端API 有:Zookeeper 官方的 java客户端API,第三方的java客户端API。
Zookeeper官方的 客户端API提供了基本的操作,比如,创建会话、创建节点、读取节点、更新数据、删除节点和检查节点是否存在等。但对于开发人员来说,Zookeeper提供的基本操纵还是有一些不足之处。
Zookeeper API不足之处如下:
(1)Zookeeper的Watcher是一次性的,每次触发之后都需要重新进行注册;
(2)Session超时之后没有实现重连机制;
(3)异常处理繁琐,Zookeeper提供了很多异常,对于开发人员来说可能根本不知道该如何处理这些异常信息;
(4)只提供了简单的byte[]数组的接口,没有提供针对对象级别的序列化;
(5)创建节点时如果节点存在抛出异常,需要自行检查节点是否存在;
(6)删除节点无法实现级联删除;
第三方开源客户端主要有zkClient和Curator。
1.1.1. ZkClient简介
ZkClient是一个开源客户端,在Zookeeper原生API接口的基础上进行了包装,更便于开发人员使用。zkClient客户端,在一些著名的互联网开源项目中,得到了应用,比如:阿里的分布式dubbo框架,对它进行了集成使用。
zkClient解决了Zookeeper原生API接口的很多问题。比如,zkClient提供了更加简洁的api,实现了session会话超时重连、Watcher反复注册等问题。虽然ZkClient对原生API进行了封装,但也有它自身的不足之处。
具体如下:
(1)zkClient社区不活跃,文档不够完善,几乎没有参考文档;
(2)异常处理简化(抛出RuntimeException);
(3)重试机制比较难用;
(4)没有提供各种使用场景的参考实现;
1.1.2. Curator简介
Curator是Netflix公司开源的一套Zookeeper客户端框架,和ZkClient一样,解决了非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等。Curator是Apache基金会的顶级项目之一,Curator具有更加完善的文档,另外还提供了一套易用性和可读性更强的Fluent风格的客户端API框架。
不止上面这些,Curator中还提供了Zookeeper各种应用场景(Recipe,如共享锁服务、Master选举机制和分布式计算器等)的抽象封装。
另外,Curator供了一套非常优雅的链式调用api,对比ZkClient客户端 Api的使用,发现 Curator的api 优雅太多。
使用ZkClient客户端,创建节点的代码为:
```
ZkClient client = new ZkClient("192.168.1.105:2181",
10000, 10000, new SerializableSerializer());
System.out.println("conneted ok!");
String zkPath = "/test/node-1";
Stat stat = new Stat();
User u = client.readData(zkPath, stat);
```
使用Curator客户端,创建节点的代码如下:
```
CuratorFramework client = CuratorFrameworkFactory.newClient(
connectionString, retryPolicy);
String zkPath = "/test/node-1";
client.create().withMode(mode).forPath(zkPath);
```
总之,由于Curator客户端确实非常优秀,Patrixck Hunt(Zookeeper)以一句“Guava is to Java that Curator to Zookeeper”,对Curator给予了高度评价。
因此,对于Zookeeper的客户端,我们这里只学习和研究Curator的使用。而且,在实际的开发场景中,使用Curator客户端,就足可以应付日常的Zookeeper集群操作需求。
疯狂创客圈社群的亿级流量IM实战项目,也使用Curator客户端来操作Zookeeper集群。
写在最后
下一篇:开启zk的客户端开发。
疯狂创客圈 亿级流量 高并发IM 实战 系列
- Java (Netty) 聊天程序【 亿级流量】实战 开源项目实战
- Netty 源码、原理、JAVA NIO 原理
- Java 面试题 一网打尽
- 疯狂创客圈 【 博客园 总入口 】