| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Zookeeper原理篇-Zookeeper启动流程分析,百度Java面试经验 -> 正文阅读 |
|
[大数据]Zookeeper原理篇-Zookeeper启动流程分析,百度Java面试经验 |
预处理预处理操作中,将创建服务实例之前需要的数据读取加载准备就绪,大体流程如下: 1.首先我们在使用zkServer.sh或者zkServer.cmd这两个脚本启动Zookeeper的时候,默认会启动 2.启动后就会开始解析Zoo.cfg配置文件,从中读取默认配置的tickTime、dataDir和clientPort等 3.当配置读取并解析完毕以后,会创建 4.从刚刚读取解析的Zoo.cfg配置文件内容中找到clientPort参数内容,通过配置的地址判断是否存在多个地址来确定当前启动的模式是单机版还是集群模式,如果当前启动模式为单机模式,将进入单机的启动流程,并且读取Zoo.cfg剩余的配置信息 5.通过解析Zoo.cfg中的配置信息相关的参数,开始创建ZookeeperServer类实例,完成了这一步后,预处理阶段完成 初始化初始化阶段,则是开始将Zookeeper中的相关服务管理类进行创建,大体流程如下: 1.创建了ZookeeperServer实例后,Zookeeper会创建一个ServerStats实例,此类用来收集Zookeeper运行过程中的统计信息,例如发送客户端的响应包次数,收到的请求包次数,最近启动后最大的延迟和最小延迟等 2.紧接着会创建Zookeeper中的数据存储管理器–FileTxnSnaplog类,此类作为最上层的,提供了一系列了操作数据文件的接口,其中包括操作事务日志和操作快照的接口,而创建当前类实例会根据zoo.cfg中的dataDir以及dataLogDir参数进行构建 3.同样根据解析出来的zoo.cfg配置文件中的tickTime以及session的会话时间来设置对应参数,并且会根据zookeeper.serverCnxnFactory参数来确定启动Zookeeper的网络连接工厂是基于Netty的还是基于jdk自身的Nio工厂 4.确定工厂类型后,Zookeeper会开始初始化一个Thread,作为整个Zookeeper运行过程中的主线程,并且开始初始化ServerCnxnFactory实例 5.当ServerCnxnFactory实例构建完毕后,开始运行对应的run方法中的业务逻辑,此时由于连接工厂已经创建,端口其实已经对外开放了,但是Zookeeper此时还未完成启动过程,还无法对外处理请求 6.开始恢复Zookeeper的数据,将从事务日志以及之前保存的快照进行数据恢复 7.数据恢复完成后,Zookeeper开始构建会话管理器–SessionTracker,此类主要负责管理Session,在创建的时候,将e xpirationlnterval, nextExpirationTime和 sessionsWithTimeout进行计算以及配置,并且会计算出每一个Session对应的SessionID,并且在运行过程中会负责Session的会话超时检测等 8.创建完毕后,Zookeeper会初始化对应的请求过滤链,而在Zookeeper中请求的过滤链使用了责任链模式,其中处理的顺序流程主要是PrepRequestProessor->SyncRequestProessor->FinalRequestProessor三个请求处理器,至此Zookeeper的初始化流程已经做完 注册提供服务当Zookeeper的初始化流程完成后,服务器已经开始到就绪状态了,只需要将对应的信息注册以后即可对外提供服务了,此阶段的流程大概如下: 可以看到此阶段中,Zookeeper只需要将JMX服务注册,以及当前相关实例注册完毕,即可完成单机启动流程,此时的Zookeeper已经正常提供服务了 集群模式启动流程集群模式的启动过程很多和单机模式是一样的,但是由于集群模式下,会有Leader机器选举以及数据同步的过程,因此Zookeeper的集群模式启动过程要复杂的多,而整个集群的启动过程,大体可以分为五个部分,分别是预处理、初始化、Leader选举、Leader与Follower交互以及Leader与Follower启动,其中预处理过程几乎与单机模式一样,唯一的区别在于解析zoo.cfg中的连接配置,判断启动模式为集群模式,开始进入集群模式的初始化操作流程而已,因此,我们从集群模式的初始化开始 初始化初始化过程大体和单机模式差不多,如下: 1.创建并初始化ServerCnxnFactory 2.创建Zookeeper中的数据文件管理器FileTxnSnaplog 3.在集群模式下,会去创建QuorumPeer实例,Quorum是集群模式下特有的对象,属于Zookeeper的托管者,此类的作用是在运行期间,会不停的检测当前服务器实例的状态,并且在需要选举的时候发起选举 4.创建Zookeeper中的内存数据库ZKDatabase实例,用来记录会话记录以及DataTree和事物日志 5.QuorumPeer实例作为托管者,会在启动过程中,将核心组件信息注册上去,包括之前创建的ZKDatabase、FileTxnSnaplog以及服务器列表信息,选举算法等 6.开始恢复数据 7.数据恢复完成后,开始启动ServerCnxnFactory中的主线程,运行run方法,开始执行服务器选举相关的操作 Leader选举选举阶段的流程大概如下: 1.Zookeeper解析zoo.cfg配置文件中的 electionAlg属性,来确定进行选举的算法是哪一种,在Zk中有三种选举算法,分别是 LeaderElection 、 AuthFastLeaderElection 和FastLeaderElection,分别对应数值0-3,不过从3.4的版本开始,zk仅支持FastLeaderElection选举算法,其他两种被废弃了。同样的,在选举的初始化阶段,zk会根据自身服务器ID、lastLoggedZxid和当前服务器的epoch初始化一个选举的票据 写在最后可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。
以上我的经历希望能够给大家带来帮助,需要这些资料的朋友可以戳这里,就可以免费拿到了 以上我的经历希望能够给大家带来帮助,需要这些资料的朋友可以戳这里,就可以免费拿到了* |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 16:48:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |