文章目录
- Zookeeper基础
- 概述
- 数据结构
- Zookeeper节点操作
- zookeeper节点操作命令
- 数据模型 znode 结构
- zookeeper java客户端
- ZooKeeper原生API
- Curator
- zkClient
- 对比总结
Zookeeper基础
概述
- zookeeper(分布式协调服务) 本质:小型的文件存储系统+监听通知机制
- ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。
- ZooKeeper 的架构通过冗余服务实现高可用性(CP)[CAP:一致性、可用性、分区容错性](最终一致性)。
- Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单
易用的接口提供给用户使用。
一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式
协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功
数据结构
- zookeeper本身是一个树形目录服务(名称空间),非常类似于标准文件系统,key-value 的形式存储。名称 key 由斜线 / 分
割的一系列路径元素,zookeeper 名称空间中的每个节点都是由一个路径来标识的。
- 每个路径下的节点key(完整路径,名称)是唯一的,即同一级节点 key 名称是唯一的
- 每个节点中存储了节点value和对应的状态属性
Zookeeper节点操作
zookeeper节点操作命令
数据模型 znode 结构
zookeeper java客户端
- zookeeper 原生API:session不支持超时重连,watch监听需要进行反复注册、不支持对节点的递归操作
- Curator:提供各个场景的实现,提供了一套fluent风格的API调用
- zkClient:几乎没有参考文档,异常处理简化,没有提供各个场景对应的实现
ZooKeeper原生API
- ZooKeeper原生API是Apache ZooKeeper项目自带的Java客户端库。它提供了连接ZooKeeper集群并执行基本操作的功能。虽然它足够灵活,但在处理复杂的分布式系统任务时可能显得有些繁琐。
- 优点:
- 官方支持,与ZooKeeper项目保持一致。
- 原生API直接暴露ZooKeeper的底层操作,可以更好地理解ZooKeeper的工作原理。
- 缺点:
- 使用复杂,需要处理连接管理、会话超时等底层细节。
- 需要手动编写一些常见的模式(例如分布式锁、队列)。
Curator
- Curator是Netflix开发的一个基于ZooKeeper的高级客户端库。它构建在ZooKeeper原生API之上,简化了许多常见任务的实现,如分布式锁、选举、缓存和Leader选举等。
- 优点:
- 提供了高级别的抽象,简化了ZooKeeper的使用。
- 包含了一系列常见的分布式系统模式的实现,如分布式锁、队列等。
- 提供了更多的错误处理机制和易用性改进。
- 缺点:
- 引入了额外的依赖,增加了项目的复杂性。
- 概念相对较多,学习曲线较陡。
zkClient
- zkClient是Apache Kafka项目中的一个ZooKeeper客户端库。它提供了一些高级别的API,简化了ZooKeeper的连接和操作。
- 优点:
- 相对于ZooKeeper原生API,zkClient提供了更高级别的抽象。
- 更容易上手,相对于Curator,zkClient的概念和学习曲线较为简单。
- 缺点:
- 社区支持相对较少。
- 功能相对较为有限,对于某些复杂场景可能不够灵活。
对比总结
特性 | ZooKeeper原生API | Curator | zkClient |
---|---|---|---|
抽象级别 | 较低 | 高 | 中 |
复杂度 | 较高 | 较高 | 中 |
功能完备性 | 一般 | 高 | 一般 |
社区支持 | Apache官方支持 | Netflix支持 | 相对较少 |
学习曲线 | 陡峭 | 陡峭 | 平缓 |