动物园的铲屎官Zookeeper——原理篇

目录

前言

一、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,数据写入成功。整个写操作完成

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值