Zookeeper 学习笔记(二)内部原理

Zookeeper 学习笔记(二)内部原理,第1张

Zookeeper 学习笔记(二)内部原理

zookeeper学习笔记系列

Zookeeper 学习笔记(一)概述

Zookeeper 学习笔记(二)内部原理

Zookeeper 学习笔记(三)zookeeper安装

Zookeeper 学习笔记(四)zookeeper集群客户端命令 *** 作

Zookeeper 学习笔记(五)面试题

选举机制

半数机制:至少半数的服务器存活zookeeper集群才算运行成功leader机制:虽然没有配置master与slaver,但选举机制选出一个leader。选举机制:投票+myid最大

    首先每次每个server投票时投自己,若当前没有leader选出来时,并发现有id大于自己的,就重新将票投给最大myid的节点直到有半数的服务器投票了,就选举当前票数最多的服务器为leader(实际为当前myid最大的服务器节点)。此后再加入的服务器节点的myid无论再怎么大,也无法竞争leader,因为leader已经有了。
节点类型

持久型

:客户端和服务端断开连接后,创建的节点不删除

持久化目录节点:客户端zookeeper断开连接后,该节点依旧存在持久化顺序编号目录节点:客户端与zookeeper断开连接后,该节点依旧存在,但zookeeper给该节点名称进行了顺序编号

短暂型

:一旦断掉连接,就节点自己删除

临时目录节点:客户端与zookeeper断开后该节点被删除临时顺序编号目录节点:客户端与zookeeper断开后该节点被删除,但zookeeper给该节点名称进行了顺序编号
节点结构体

zookeeper中存储的每一个节点都会有信息,其节点信息为一个结构体,具体内容如下:

    czxid :创建节点的事务zxid

每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper,事务ID。v事务ID是ZooKeeper 中所有修改总的次序。每个修改都有唯一的zxid,如果 zxid1小于zxid2,那么zxid1在zxid2之前发生。

    ctime :znode,被创建的毫秒数(从1970年开始)mzxid :znode最后更新的事务zxidmtime :znode最后修改的毫秒数(从1970年开始)pZxid :znode最后更新的子节点zxidcversion : znode子节点变化号,znode子节点修改次数,7) dataversion - znode数据变化号。aclVersion : znode 访问控制列表的变化号,ephemeralOwner :如果是临时节点,这个是 znode,拥有者的session id。如果不是临时节点则是0。dataLength : znode的数据长度numChildren : znode子节点数量
写数据流程

每次客户端向zookeeper集群的服务器写数据时,其主要的流程如下图:

    客户端向zookeeper上一个服务器节点server1发送写请求server1如果不是leader,会把请求转发给leaderleader会将写请求广播给集群各个服务器节点当leader收到一半以上节点写成功,就会告诉server1写成功server1返回给客户端写成功
监听器原理

在zookeeper常用的功能就是客户端想zookeeper注册监听某数据,那么这个监听的原理如下:

    首先有一个main()线程在main线程中创建zookeeper客户端,就会有connet通信与监听listener的两个线程通过connet线程将注册的监听事件发送给zookeeperzookeeper的注册监听器列表中将注册的监听时间添加到列表zookeeper监听到数据路径有变化,就会将消息发送给listener线程listener线程内部进行需要的处理程序(外部实现)

常用监听命令:

监听节点数据变化get path [watch]监听子节点增减变化ls path [watch]

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5704812.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存