Young's blog Young's blog
首页
Spring
  • 前端文章1

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Young

首页
Spring
  • 前端文章1

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Zookeeper入门相关概念总结
  • Zookeeper安装与使用实战
  • Zookeeper配置文件详解
  • Zookeeper一致性协议——ZAB
  • Zookeeper实战之客户端Curator vs zkClient
    • 1. zookeeper 应用开发
    • 1.1 ZkClient 简介
    • 1.2 Curator 简介
  • 万字总结Zookeeper客户端Curator操作Api
  • Zookeeper
andanyang
2023-04-14
目录

Zookeeper实战之客户端Curator vs zkClient

# 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 ZkClient 简介

ZkClient 是一个开源客户端,在 Zookeeper 原生 API 接口的基础上进行了包装,更便于开发人员使用。zkClient 客户端,在一些著名的互联网开源项目中,得到了应用,比如:阿里的分布式 dubbo 框架,对它进行了集成使用。

zkClient 解决了 Zookeeper 原生 API 接口的很多问题。比如,zkClient 提供了更加简洁的 api,实现了 session 会话超时重连、Watcher 反复注册等问题。虽然 ZkClient 对原生 API 进行了封装,但也有它自身的不足之处。

具体如下:

(1)zkClient 社区不活跃,文档不够完善,几乎没有参考文档;

(2)异常处理简化(抛出 RuntimeException);

(3)重试机制比较难用;

(4)没有提供各种使用场景的参考实现;

# 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);
1
2
3
4
5
6
7
8
9
10
11

使用 Curator 客户端,创建节点的代码如下:

  CuratorFramework client =  CuratorFrameworkFactory.newClient(

               connectionString, retryPolicy);

       String zkPath = "/test/node-1";

       client.create().withMode(mode).forPath(zkPath);
1
2
3
4
5
6
7

总之,由于 Curator 客户端确实非常优秀,Patrixck Hunt(Zookeeper)以一句“Guava is to Java that Curator to Zookeeper”,对 Curator 给予了高度评价。

因此,对于 Zookeeper 的客户端,我们这里只学习和研究 Curator 的使用。而且,在实际的开发场景中,使用 Curator 客户端,就足可以应付日常的 Zookeeper 集群操作需求。

编辑 (opens new window)
上次更新: 2024/04/19, 08:52:45
Zookeeper一致性协议——ZAB
万字总结Zookeeper客户端Curator操作Api

← Zookeeper一致性协议——ZAB 万字总结Zookeeper客户端Curator操作Api→

最近更新
01
idea 热部署插件 JRebel 安装及破解,不生效问题解决
04-10
02
spark中代码的执行位置(Driver or Executer)
12-12
03
大数据技术之 SparkStreaming
12-12
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Young | MIT License
浙ICP备20002744号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式