什么是Zookeeper

官方定义:

zookeeper是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

可以简单理解为 Zookeeper = 文件系统 + 监听通知机制

Zookeeper的特性

注:以下server指Zookeeper的单个服务节点,client指Zookeeper的客户端

  1. 全局数据的一致:每个 server 保存一份相同的数据副本,client 无论链接到哪个 server,展示的数据都是一致的
  2. 可靠性:如果消息被其中一台服务器接受,那么将被所有的服务器接受
  3. 顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息 a 在消息 b 前发布,则在所有 server 上消息 a 在消息 b 前被发布,偏序是指如果一个消息 b 在消息 a 后被同一个发送者发布,a 必须将排在 b 前面
  4. 数据更新原子性:一次数据更新要么成功,要么失败,不存在中间状态
  5. 实时性:ZooKeeper 保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息

ZooKeeper的特性和功能是实现诸如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等服务的基础

文件系统

Zookeeper维护一个类似文件系统的数据结构:

ZooKeeper节点(如上图中/NameServer)称为 znode 。每个znode由一个名称标识,并用路径(/)序列分隔
znode由三部分组成:

  • stat:此为状态信息,描述该Znode版本、权限等信息。
  • data:与该Znode关联的数据
  • children:该Znode下的节点

我们能够自由地增加、删除znode,在一个znode下增加、删除子znode,并且可以在znode中存储数据

Zone节点的类型

  • 持久节点:即使在创建该特定znode的客户端断开连接后,持久节点仍然存在。默认情况下,除非另有说明,否则所有znode都是持久的。
  • 临时节点 - 客户端活跃时,临时节点就是有效的。当客户端与ZooKeeper集合断开连接时,临时节点会自动删除。因此,只有临时节点不允许有子节点。如果临时节点被删除,则下一个合适的节点将填充其位置。临时节点在leader选举中起着重要作用。
  • 顺序节点 - 顺序节点可以是持久的或临时的。当一个新的znode被创建为一个顺序节点时,ZooKeeper通过将10位的序列号附加到原始名称来设置znode的路径。例如,如果将具有路径 /myapp 的znode创建为顺序节点,则ZooKeeper会将路径更改为 /myapp0000000001 ,并将下一个序列号设置为0000000002。如果两个顺序节点是同时创建的,那么ZooKeeper不会对每个znode使用相同的数字。顺序节点在锁定和同步中起重要作用。

监听机制

客户端通过Zookeeper提供的API注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

ZooKeeper应用场景

依据ZooKeeper全局数据一致、数据更新原子性、实时性等特性及其监听机制,可以用于实现分布式锁、统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

分布式应用配置管理

假设我们的程序是分布式部署在多台机器上,如果我们要改变程序的配置文件,需要逐台机器去修改,非常麻烦,现在把这些配置全部放到zookeeper上去,保存在 zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 zookeeper 的通知,然后从 zookeeper 获取新的配置信息应用到系统中。

分布式锁

  • 在 ZooKeeper 指定节点(locker)下创建临时顺序节点 node_n
  • 获取 locker 下所有子节点 children
  • 对子节点按节点自增序号从小到大排序
  • 判断本节点是不是第一个子节点,若是,则获取锁;若不是,则等待
  • 使用 ZooKeeper 感知节点的功能,对本节点的上一个节点进行感知
  • 当上一个节点被删除了,ZooKeeper 会通知该线程,该线程就结束等待,并获取锁
  • 释放锁,并删除该临时节点

详细分布式锁实现可以参考菜鸟教程:Zookeeper 分布式锁实现原理

Zookeeper安装

参考:W3Cschool:Zookeeper安装步骤

参考

  • Zookeeper入门看这篇就够了
  • Zookeeper 概述

Zookeeper入门总结相关推荐

  1. 【Zookeeper实战】Zookeeper入门到实战看这篇就够了

    1. 前言 在上一篇[Zookeeper入门]相关概念总结 中已经完美的讲解了 Zookeeper入门 相关概念总结,接下来讲讲ZooKeeper 实战使用. 这篇文章简单给演示一下 ZooKeepe ...

  2. ZooKeeper入门指南

    ZooKeeper入门指南 目录: 入门:使用ZooKeeper协调分布式应用程序 先决条件 下载 独立操作 管理ZooKeeper存储 连接到ZooKeeper 编程到ZooKeeper 运行复制的 ...

  3. 【转】Zookeeper入门

    原文出处:Zookeeper入门看这篇就够了 Zookeeper是什么 官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式 ...

  4. 尚硅谷大数据技术Zookeeper教程-笔记01【Zookeeper(入门、本地安装、集群操作)】

    视频地址:[尚硅谷]大数据技术之Zookeeper 3.5.7版本教程_哔哩哔哩_bilibili 尚硅谷大数据技术Zookeeper教程-笔记01[Zookeeper(入门.本地安装.集群操作)] ...

  5. Zookeeper 入门学习

    往期博客目录 1. 详解Linux(基础篇) 2. 详解Linux(进阶篇) 3. Git&GitHub(基础) 4. Git&GitHub(进阶) 5. java多线程 6. Jav ...

  6. [转]Zookeeper入门看这篇就够了

    Zookeeper是什么 官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名 ...

  7. ZooKeeper官方文档学习笔记02-ZooKeeper入门指南

    本来以为学一篇都会很难很难,但是好像也没有那么难.虽然有些名词不太理解,但我决定后续学习中应该会遇到吧? 入门:使用ZooKeeper协调分布式应用程序 先决条件 下载 独立运行 1 选择一个合适的目 ...

  8. zookeeper入门学习《一》

    Zookeeper的安装就不介绍了,mac上用 brew install zookeeper就行了,可以看到已经启动着. 下面是   zoo.cfg的主要配置 tickTime=2000    zoo ...

  9. Zookeeper 入门指北

    Zookeeper 是一个分布式调度服务,用来解决分布式系统中的统一调度问题.开发一个分布式系统是一件很困难的事情,主要原因就是因为我们没办法去很有效的处理分布式系统中部分服务失败的问题.在一个分布式 ...

最新文章

  1. COZMO机器人的部分表情说明
  2. 《JavaScript高级程序设计》阅读笔记(二):ECMAScript中的原始类型
  3. leetcode690. 员工的重要性(bfs)
  4. Ubuntu16.04下在Anaconda里面安装opencv
  5. DB中字段为null,为空,为空字符串,为空格要怎么过滤取出有效值
  6. CPU 架构 —— ARM 架构
  7. 【问题记录】python 函数 传入一个对象返回一个对象值得注意
  8. [PYTHON]一个简单的单元測试框架
  9. 最新简库软件库工具箱综合iApp安卓源码
  10. java 6个逆向工程软件
  11. html语言代码大全,html常用代码大全 寻找最全的HTML语言代码大全
  12. p5.js之Q版人物绘制
  13. 如何为word文档增加脚注
  14. UE4 UV缩放 旋转和偏移
  15. ART 虚拟机 — Interpreter 模式
  16. 办公小技巧:excel删除重复项
  17. 上手 WebRTC DTLS 遇到很多 BUG,怎么解?
  18. 珠海实验室通风系统建设安装说明
  19. Android录制声音文件(音频),并播放
  20. C语言“水仙花数”是一个正三位数,他的个位十位百位的立方和等于他本身

热门文章

  1. ADPC2-D 分配颜色
  2. 牛客题霸 [栈和排序] C++题解/答案
  3. 2020牛客暑期多校训练营(第四场)
  4. CF464E-The Classic Problem【最短路,主席树】
  5. Ybt#452-序列合并【期望dp】
  6. P4867-Gty的二逼妹子序列【平衡结合,莫队,分块】
  7. 欢乐纪中某B组赛【2019.1.30】The penultimate day
  8. 学习手记(2018/7/14~2018/7/18)——快乐纪中
  9. ssl1335-最佳派对【二分图,最大匹配,图论】
  10. 【dfs】【模拟】【树】I Like Matrix Forever!