目录

前言

一、Zookeeper是什么

二、Zookeeper集群特点

三、Zookeeper的数据结构

1. Znode类型

2. stat结构体

三、Zookeeper内部原理

1. 监听器原理

2. 写数据流程


前言

hadoop生态圈中的动物有点点多,所以我们的zookeeper光荣的担任了铲屎官这一工作,鼓掌~~~~。


一、Zookeeper是什么

Zookeeper是一个开源的,分布式的,为分布式应用提供协调服务的Apache项目。

两大功能:Zookeeper = 文件系统(存储数据) + 通知机制。

举例解释:当微信公众号推送文章的时候,微信服务器做了两件事。第一,将公众号发布的文章保存下来,这实现了文件系统,保存了文件。第二,将文章推送给订阅了该公众号的用户,这实现了通知功能。如下图中腾讯服务器集群也就是zookeeper集群。

二、Zookeeper集群特点

通常我们会搭建zookeeper集群,在Zookeeper集群中有一个领导者(leader)多个跟随者(f跟随者(follower),他们共同组成了Zookeeper集群,具有以下特点。

1、leader负责发起投票和决议,更新整集群的状态。

2、follower用于接收客户请求并向客户端返回结果,在选举leader过程中参与投票。

3、集群中只要有半数以上的节点存活,Zookeeper集群就可以正常服务。

4、全局数据一致性:每个server保存一份相同的数据副本,client不管连接哪个server,获取的数据都是相同的。

5、更新请求顺序进行,同一个client的更新请求,按照其发送顺序依次执行。

6、数据更新一致性:一次数据更新,要么成功更新,要么失败。

7、实时性:在一定时间范围内,client能实时更新。

三、Zookeeper的数据结构

Zookeeper 数据模型的结构和 Unix 很像,都有一个根节点 / 。在根节点下面是一个个子节点,称之为 Znode ,Znode 是Zookeeper 中最小的数据单位。每个 Znode 下面还可以再挂 Znode ,这样一层层下去就形成了一个层次化命名空间 Znode 树,我们称之为 Znode Tree。

Zookeeper 中每一个数据节点都是一个 Znode 。如下图根节点下有两个节点,分别是:znode1、znode2,znode1下又有两个子节点 leaf1 和 leaf2 ,znode2 下 有 leaf 节点。我们可以在这五个节点下存储信息。

Zookeeper 将数据存储在 Znode 上,每个 Znode 默认可以存储 1MB 的数据,每个节点可以通过其路径唯一标识。

1. Znode类型

(1)临时节点(客户端和服务器断开连接后,创建的节点会被删除)

1) 临时普通节点 :客户端与 Zookeeper 断开后,该节点被删除。

2)临时带序号节点:Zookeeper给该节点名称进行顺序编号,客户端与 Zookeeper 断开后,该节点被删除。

(2)永久节点(客户端和服务器断开连接后,创建的节点不会删除)

1)永久普通节点:客户端与 Zookeeper 断开后,该节点依旧存在。

2)永久带序号节点:Zookeeper给该节点名称进行顺序编号,客户端与 Zookeeper 断开后,该节点依旧存在。

2. stat结构体 ​​​​​​​

1)czxid-   create 引起这个znode创建的zxid,创建节点的事务的zxid

每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。

事务ID是ZooKeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。

2)ctime -   create znode被创建的毫秒数(从1970年开始)

3)mzxid - modify znode最后更新的zxid

4)mtime - modify znode最后修改的毫秒数(从1970年开始)

5)pZxid-znode最后更新的子节点zxid

6)cversion - znode子节点变化号,znode子节点修改次数

7)dataversion - znode数据变化号

8)aclVersion - znode访问控制列表的变化号

9)ephemeralOwner- 如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。

10)dataLength- znode的数据长度

11)numChildren - znode子节点数量

三、Zookeeper内部原理

1. 监听器原理

监听原理详解,如上图

(1)首先要有一个main() 线程。

(2)在 main() 线程中创建一个客户端(zkClient),这时就会创建两个线程,一个负责网络连接通信(connect),一个负责监听(listener)。

(3)通过 connect 线程,将注册的监听事件发送给Zookeeper。

(4)Zookeeper会进行记录,将注册的监听事件添加到zookeeper的注册监听器列表中。

(5)Zookeeper监听到有数据或者路径变化,就会将这个消息发送给listener线程。

(6)listener 线程内部调用了 process() 方法。

2. 写数据流程

Zookeeper写数据的流程主要分为以下几步,如上图所示:

(1)Client 向 Zookeeper 中的 Server1上面写数据,发送一个写请求。

(2)每个 Zookeeper 中只有一个Leader,如果Server1不是Leader,将会把接收到的请求转发给Leader。Leader将会把这个写请求广播给各个Server,各个Server写成功后会通知Leader。

(3)当Leader收到半数以上的Server写成功的通知后,就说明数据写成功了。写成功之后Leader会告诉Server1数据写成功了。

(4)Server1接收到数据写成功的通知后会告诉Client,数据写入成功。整个写操作完成

动物园的铲屎官Zookeeper——原理篇相关推荐

  1. OSChina 周三乱弹 ——猫和铲屎官总要疯一个

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2017)请戳(这里) [今日歌曲] @MKUS :分享杨千嬅的单曲<勇>: <勇>- ...

  2. 铲屎官们看过来~想做宠物博主不知道怎么做?多种变现途径

    有钱有闲,猫狗双全.这是不是你心目中的理想生活? 不管学习.工作压力有多大,地铁有多挤,只要回家看到"毛孩子",所有疲惫就会瞬间得到治愈. 还有很多没办法养宠物的人,就会在网络上云 ...

  3. 铲屎官福音:汪星人和喵星人的小情绪,AI 可以识别了

    来源:HyperAI超神经本文约1500字,建议阅读5分钟你的喵星人.汪星人每天都在"说"些什么呢?为了听懂它们的语言,一些团队研发出了专属宠物的 AI 翻译神器,助你做一名更合格 ...

  4. 痛与快乐有一个代码是什么_养一只真大型犬的生活是什么样的?铲屎官:痛并快乐着!...

    全国多地都颁布了禁养大型犬相关条例,给人一种狗狗「体型大」就很「凶恶」的感觉. 但真是这样的吗? 今天,我还想为大家介绍一种体型超大号,内心却很奶的狗子--中亚牧羊犬. 下面就是今天的主人公--金刚, ...

  5. 6000多万铲屎官,捧得出一个国产主粮的春天吗?

    文|螳螂观察 作者|图霖 抖音近期大火的「猫猫教」.「狗狗教」,正在掀起新一轮晒宠热潮. 相关话题下,各位铲屎官纷纷晒出自家主子的萌照.有「好事」的网友甚至将饭圈那套带进评论区,猫狗两教,各有拥趸. ...

  6. 阿里菜鸟愚人节最新力作,高大上宠物递送萌翻铲屎官

    4月1日愚人节,对于科技公司来说,早已变成了发布"黑科技"产品的"黄道吉日".当大多科技产品追求高冷炫酷时,菜鸟裹裹却为广大宠物主谋福,贴心上线萌宠递送服务-- ...

  7. 兽医提醒:狗狗生病的9个征兆,建议铲屎官收藏,以备不时之需!

    作为养狗的宠主,大家都比较关心的狗狗身体健康,狗狗虽然被叫做毛孩子,但是生病了也无法说话告诉主人. 因此,今天分享狗狗生病的9个征兆,建议铲屎官收藏,以备不时之需! 1.不爱活动 狗狗生病时,身体状态 ...

  8. 铲屎官期盼已久的电影终于来啦!~

    铲屎官期盼已久的电影终于来啦!~ 各位铲屎官们有福了,一部专门讲"猫小主"的电影,在不久的将来被搬上大银幕. 儿童文学系列<猫武士>改编成电影的项目被提上了日程. 在第 ...

  9. 猫咪藏在哪个房间python项目_铲屎官必读:猫咪为什么都喜欢藏在盒子里?

    原标题:铲屎官必读:猫咪为什么都喜欢藏在盒子里? Защитные механизмы 保护机制 Каждому животному присущи разные защитные механизмы ...

最新文章

  1. 常见面试题:重写strcpy() 函数原型
  2. 搭建Windows Server 2008故障转移群集
  3. java 命名代码检查-注解处理器
  4. 聊一聊,用户画像的前世今生
  5. 使用卷积神经网络识别交通标志
  6. Linux 内核如何描述一个进程?
  7. 嵌入式Linux系统编程学习之五gcc/g++编译器
  8. python tk text 自动换行_Python tkinter之Text
  9. JavaScript——(function(){})()立即执行函数解析
  10. 使用Movavi Video Editor如何做局部放大的影片特效
  11. 基于React的AmazeUI-touch使用(如何使用react)
  12. 小米手机鸿蒙开机动画,华为“鸿蒙”来了!开机动画美炸了,用PPT一分钟就搞定...
  13. 戴尔T630安装Ubuntu操作系统及Gaussian 09
  14. bim 水利枢纽 运维_BIM——运维专篇
  15. java日期格式化 类_Java日期格式化(DateFormat类和SimpleDateFormat类)
  16. 基于樽海鞘群算法的线性规划求解matlab程序
  17. Windows10下美化字体,达到类似mac的效果
  18. 2017第十九届中国国际地面材料及铺装技术展览会会刊(参展商名录)
  19. 用 .pth 文件附加 Python 模块搜索路径
  20. Linux+宝塔安装swoole教程

热门文章

  1. web前端 - 写出漂亮JavaScript代码的实用技巧
  2. 【板栗糖GIS】arcscene—如何做出有高度的高程图
  3. 个人工具开发【卡片式记忆面试题开发】v.1.0.2
  4. 全新MacBook Pro MYD82CH/A / MYDA2CH/A / MYD92CH/A / MYDC2CH/A 配置
  5. 图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵
  6. IDEA安装流程(IDEA安装步骤)
  7. 手写mybatis彻底搞懂框架原理
  8. linux c open 权限,linux c open函数用法
  9. 基于规则的结构化数据知识抽取(一)
  10. 在IDEA中使用preparestatement,使用setdate出错的问题