极简介绍Zookeeper,我想跟你聊这些!

简介: 从今天开始,我们正式更新【精通Zookeeepr系列】专题内容,首先我们对Zookeeper的基础内容做下简单的回顾和总结。本文的总体内容如下。

大家好,我是冰河~~

从今天开始,我们正式更新【精通Zookeeepr系列】专题内容,首先我们对Zookeeper的基础内容做下简单的回顾和总结。本文的总体内容如下。

微信图片_20211120153424.jpg

什么是Zookeeper?

简单来说,Zookeeper是一个开源的分布式协同服务系统,Zookeeper的设计目标就是把复杂并且容易出错的分布式协同服务进行封装,并抽象出一个高效可靠的原语接口,并对外提供一系列简单的接口为其他服务调用。其他应用只要使用Zookeeper提供的接口,就可以实现各种分布式应用。例如:分布式锁、分布式选举,主从切换等等。这些案例我们在实战内容中会详细说明。

Zookeeper发展史

Zoookeeper最早是雅虎为了解决内部多个系统之间的协同问题而研发的,后来将其开源并捐赠给了Apache组织。后来Zookeeper在开源界被广泛使用。这里,我列举几个使用了Zookeeper的著名的开源项目。

  • Hadoop:使用Zookeeper来提供NameNode的高可用机制。
  • HBase:使用Zookeeper来保证整个集群中只有一个Master节点,保存集群中的RegionServer列表,保存hbase:meta表的位置。
  • Kafka:使用Zookeeper来对进群中的成员进行管理,并使用Zookeeper提供controller节点的选举机制。
  • Dubbo:使用Zookeeper来实现分布式治理服务的注册中心。
  • SpringCloud:使用Zookeeper来实现微服务注册中心。

还有很多使用Zookeeper作为分布式协同的开源项目,由于数量比较多,这里就不一一列举了,小伙伴们可以自行通过网络查阅。

Zookeeper应用场景

简单点说,Zookeeper可以应用于以下场景当中。

  • 配置管理。
  • DNS服务。
  • 组成员管理。
  • 各种分布式锁。
  • 分布式选举。
  • 数据一致性场景。

但是,需要注意的是:Zookeeper只适合于存储和协同相关的关键数据,不适合用来存储大数据量的数据。

Zookeeper服务的使用

一般情况下,我们在使用Zookeeper时,是通过Zookeeper库来连接并使用Zookeeper的,由Zookeeper客户端负责和Zookeeper集群进行交互。

微信图片_20211120153426.jpg

Zookeeper的数据模型

从本质上讲,Zookeeper的数据模型是层次模型,如下所示。微信图片_20211120153427.jpg

这种层次模型常见于文件系统,而这种层次模型和Key-Value模型是两种主流的数据模型。Zookeeper使用文件系统模型主要的考虑点如下。

  • 文件系统的树形结构便于表达数据之间的层次关系。
  • 文件系统的树形结构便于为不同的应用分配独立的命名空间。

在Zookeeper中,层次结构的每个节点叫做znode,它不同于文件系统,每个节点都可以保存数据,而且每个节点都有一个版本号,版本号从0开始递增计数。

接下来,我们再来看一个Zookeeper节点的具体示例。

微信图片_20211120153429.jpg

例如,上图中有三个子树,三个子树分别应用于app1、app2和app3三个应用。其中app1的子树实现了一个简单的组成员协议,也就是每个客户端进行p创建一个znode在/app1节点下,而且每个进程创建的znode是以/app1/p_1,/app1/p_2,...,/app1/p_n 这种结构依次存放。只要 /app1/p_n 节点存在,就说明Pn进程在正常的运行。

Zookeeper的节点分类

总体来说,Znode节点可以分为以下四类。

微信图片_20211120153429.jpg

一个Znode节点可以是持久性的,也可以是临时性的。

  • 持久性的Znode:创建节点后即使Zookeeper集群宕机,或者Zookeeper客户端宕机,节点也不会丢失。
  • 临时性的Znode:Zookeeper客户端宕机或者客户端在指定的超时时间内没有给Zookeeper集群发送消息,那么这个节点就会消失。

Znode节点也可以是顺序性的,所谓的顺序性,就是指每个节点会关联一个唯一的单调递增整数,这个单调递增的整数就是Znode节点名称的后缀,比如:/app1/p_1,/app1/p_2等,由此,Znode又有如下两种分类:

  • 持久顺序性的Znode:除了具备持久性的Znode的特性之外,Znode的名称还具备顺序性。
  • 临时顺序性的Znode:除了具备临时性的Znode的特性之外,Znode的名称还具备顺序性。


相关文章
Axure实战18:创建一个PRD产品需求文档生成器
Axure实战18:创建一个PRD产品需求文档生成器
1554 0
Axure实战18:创建一个PRD产品需求文档生成器
|
4月前
|
存储 弹性计算 应用服务中间件
2026年阿里云服务器配置选型指南:个人与企业用户适配方案
在阿里云服务器选型中,核心是根据用户类型(个人 / 企业)、业务场景(网站搭建、开发测试、生产应用)及性能需求,匹配 CPU、内存、带宽、存储的最优组合。不同用户对成本、稳定性、扩展性的诉求差异显著,个人开发者侧重性价比与易用性,企业用户则需保障性能稳定与业务连续性。本文结合实例规格特性与场景需求,提供从入门到企业级的完整选型参考。
|
5月前
|
人工智能 数据可视化 数据挖掘
2025年企业级BI系统建设指南:从工具选型到落地应用,解锁数据决策价值
2025年,数据成企业核心生产要素。本文聚焦BI系统建设,解析瓴羊Quick BI、永洪Yonghong、Tableau、Power BI、网易易数五大主流工具,涵盖选型策略、落地应用与成本控制,助力企业实现数据驱动决策,提升竞争力。
|
8月前
|
传感器 算法 安全
【无人机三维路径规划】基于灰雁GGO实现无人机三维路径规划(目标函数:最优成本 路径 高度 威胁 转角)研究(Matlab代码代码实现)
【无人机三维路径规划】基于灰雁GGO实现无人机三维路径规划(目标函数:最优成本 路径 高度 威胁 转角)研究(Matlab代码代码实现)
291 6
【无人机三维路径规划】基于灰雁GGO实现无人机三维路径规划(目标函数:最优成本 路径 高度 威胁 转角)研究(Matlab代码代码实现)
|
7月前
|
数据采集 搜索推荐 API
速来!小红书电商 API 接口,解锁种草数据新玩法
小红书电商API助力开发者高效获取种草数据,涵盖内容推荐、用户行为等核心字段。本文详解API调用、数据清洗与分析技巧,并提供Python实战代码,解锁个性化推荐、市场趋势预测等创新应用,助你快速掌握数据驱动玩法。(238字)
486 0
|
9月前
|
存储 物联网 关系型数据库
基于STM32和ESP8266的智慧考勤系统设计与实现【免费开源】
本文介绍了一个基于 STM32F103ZET6 + ESP8266 Mesh 的智慧考勤系统,涵盖了硬件架构、软件设计、网络组网、服务器端实现与数据导出。该系统不仅实现了考勤自动化,还支持多点分布式部署,具有良好的扩展性与应用价值。
|
11月前
|
人工智能 索引 Python
[oeasy]python094_使用python控制音符列表_midi_文件制作
本文介绍了如何使用Python控制音符列表制作MIDI文件。首先回顾了列表下标索引(正数和负数)的用法,接着通过`mido`库实现MIDI文件生成。以《两只老虎》为例,详细解析了代码逻辑:定义音高映射、构建旋律列表、创建MIDI文件框架,并将音符插入音轨。还探讨了音符时值与八度扩展的实现方法。最终生成的MIDI文件可通过不同平台播放或编辑。总结中提到,此技术可用于随机生成符合调性的旋律,同时引发对列表其他实际应用的思考。
433 5
鸿蒙开发:实现popup弹窗
目前提供了两种方式实现popup弹窗,主推系统实现的方式,几乎能满足我们常见的所有场景,当然了,文章毕竟有限,尽量还是以官网为主。
427 2
鸿蒙开发:实现popup弹窗
|
Java 开发者 Spring
Spring Cloud Gateway 中,过滤器的分类有哪些?
Spring Cloud Gateway 中,过滤器的分类有哪些?
615 3
|
C语言 C++
C语言函数调用的易错点
在 C 语言中,函数调用时常见的易错点包括:参数类型不匹配、缺少或多余参数、返回值未使用、函数未声明、递归调用未终止、指针传递错误、使用未初始化的变量等。C 语言不支持函数重载,在 C++ 中使用时需注意区分。正确处理这些易错点可以提高代码的稳定性和可维护性。

热门文章

最新文章