Zookeeper-Zookeeper选举源码

看源码方法:

1、先使用:先看官方文档快速掌握框架的基本使用

2、抓主线:找一个demo入手,顺藤摸瓜快速静态看一遍框架的主线源码,画出源码主流程图,切勿一开始就陷入源码的细枝末节,否则会把自己绕晕,凭经验猜

3、画图做笔记:总结框架的一些核心功能点,从这些功能点入手深入到源码的细节,边看源码边画源码走向图,并对关键源码的理解做笔记,把源码里的闪光点都记录下来,后续借鉴到工作项目中,理解能力强的可以直接看静态源码,也可以边看源码边debug源码执行过程,观察一些关键变量的值

4、整合总结:所有功能点的源码都分析完后,回到主流程图再梳理一遍,争取把自己画的所有图都在脑袋里做一个整合

从源码启动zookeeper

zookeeper源码下载地址:

//选择分支3.5.8 https://github.com/apache/zookeeper.git

0

源码导入idea后,org.apache.zookeeper.Version类会报错,需要建一个辅助类

package org.apache.zookeeper.version; public interface Info { int MAJOR = 1; int MINOR = 0; int MICRO = 0; String QUALIFIER = null; int REVISION = -1; String REVISION_HASH = "1"; String BUILD_DATE = "2020-10-15"; }

然后在根目录编译执行:

mvn clean install -DskipTests

开源项目找入口类一般都是从启动脚本去找,可以从bin目录下的zkServer.sh或zkServer.cmd里找到启动主类运行即可

org.apache.zookeeper.server.quorum.QuorumPeerMain

注意:

1、将conf文件夹里的zoo_sample.cfg文件复制一份改名为zoo.cfg,将zoo.cfg文件位置配置到启动参数里

0

2、启动之前需要先将zookeeper-server项目里pom.xml文件里依赖的包(除了jline)的scope为provided这一行全部注释掉

2、将conf文件夹里的log4j.properties文件复制一份到zookeeper-server项目的 \target\classes 目录下,这样项目启动时才会打印日志

用客户端命令连接源码启动的server:

bin/zkCli.sh -server 192.168.50.190:2181

从源码里运行客户端(org.apache.zookeeper.ZooKeeperMain),注意需要加入启动参数,见下图:

0

0

从源码启动zookeeper集群

        复制3个zoo.cfg文件,修改对应集群配置,并在data目录里分别建各自的myid文件填入机器id,并创建三个不同配置的启动节点,见下图:

0

分别运行每个节点,集群启动完毕!

启动或leader宕机选举leader流程

0

leader选举多层队列架构

        整个zookeeper选举底层可以分为选举应用层和消息传输层,应用层有自己的队列统一接收和发送选票,传输层也设计了自己的队列,但是按发送的机器分了队列,避免给每台机器发送消息时相互影响,比如某台机器如果出问题发送不成功则不会影响对正常机器的消息发送。

0

Leader选举源码流程图(务必跟着视频看)

0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/590714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 用户认证:如何检查用户是否已登录

🧙‍♂️ 诸位好,吾乃诸葛妙计,编程界之翘楚,代码之大师。算法如流水,逻辑如棋局。 📜 吾之笔记,内含诸般技术之秘诀。吾欲以此笔记,传授编程之道,助汝解技术难题。 &…

Primavera Unifier 项目控制延伸:Phase Gate理论:3/3

继续上一篇阶段Gate的具体内容 https://campin.blog.csdn.net/article/details/127827681https://campin.blog.csdn.net/article/details/127827681 阶段 3 研发 前述阶段的计划和安排都要在研发阶段执行起来,同时,最重要的产品设计和开发部分也需要在…

系统学习Python——装饰器:函数装饰器-[对方法进行装饰:基础知识]

分类目录:《系统学习Python》总目录 我们在前面的文章中编写了第一个基于类的tracer函数装饰器的时候,我们简单地假设它也应该适用于任何方法一一一被装饰的方法应该同样地工作,并且自带的self实例参数应该直接包含在*args的前面。但这一假设…

7-2 换硬币

将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法? 输入格式: 输入在一行中给出待换的零钱数额x∈(8,100)。 输出格式: 要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出…

计算机基础面试题 |04.精选计算机基础面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

python打开文件的方式比较

open(addr,w) 打开之后文件无论以前有什么,打开后都要清空 /// open(addr,r) 文件打开后,不删除以前内容

Ubuntu连接xshell

安装ssh服务器 sudo apt-get install openssh-server​ 重启ssh sudo service ssh restart 3.启动ssh服务 /etc/init.d/ssh start4.修改文件,允许远程登陆 sudo vi /etc/ssh/sshd_config PermitRootLogin prohibit-password #默认为禁止登录 PermitRootLogin y…

JAVA Web 期末复习

期末复习 填空题简答题:一、数据库连接池的工作机制是什么:二、javabean的规范:三、POST和GET请求的区别四、请求转发和重定向的区别五、简述pageContext的作用:六、什么是重定向七、简述一下MVC及作用八、cookie和session九、简述…

多人协同开发git flow,创建初始化项目版本

文章目录 多人协同开发git flow,创建初始化项目版本1.gitee创建组织模拟多人协同开发2.git tag 打标签3.git push origin --tags 多人协同开发git flow,创建初始化项目版本 1.gitee创建组织模拟多人协同开发 组织中新建仓库 推送代码到我们组织的仓库 2…

国家开放大学形成性考核 统一考试 资料参考

试卷代号:11130 卫生法学 参考试题(开卷) 一、单选题(每题2分,共30分) 1.省、自治区、直辖市及省会所在地的市人大及其常委会,或经国务院批准的较大的市的人大及其常委会,依法…

STM32与TB6612电机驱动器的基础入门教程

TB6612是一款常用的双路直流电机驱动芯片,适用于小型机器人以及其他需要控制电机方向和转速的应用。在STM32微控制器的配合下,可以实现对TB6612电机驱动器的控制,进而实现电机的控制。本文将带领读者一步步了解如何搭建基于STM32与TB6612的电…

Python基础-03(算数运算符、赋值运算符)

文章目录 前言一、算数运算符二、赋值运算符()1.赋值运算符()2.复合赋值运算符 总结 前言 两种非常基础的运算符,看一下就懂,不需要过多的去深究细节 一、算数运算符 稍微着重看下 除法/ (不要…

我从来不理解JavaScript闭包,但我用了它好多年

前言 📫 大家好,我是南木元元,热衷分享有趣实用的文章,希望大家多多支持,一起进步! 🍅 个人主页:南木元元 你是否学习了很久JavaScript但还没有搞懂闭包呢?今天就来聊一下…

SpringBoot解决前后端分离跨域问题:状态码403拒绝访问

最近在写和同学一起做一个前后端分离的项目,今日开始对接口准备进行 登录注册 的时候发现前端在发起请求后,抓包发现后端返回了一个403的错误,解决了很久发现是【跨域问题】,第一次遇到,便作此记录✍ 异常描述 在后端…

Java---网络编程

文章目录 1. 网络编程概述2. InetAddress3. 端口和协议4. Java网络API5. URL6. URLConnection类 1. 网络编程概述 1. 计算机网络:是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软…

2024年Mac专用投屏工具AirServer 7 .27 for Mac中文版

AirServer 7 .27 for Mac中文免费激活版是一款Mac专用投屏工具,能够通过本地网络将音频、照片、视频以及支持AirPlay功能的第三方App,从 iOS 设备无线传送到 Mac 电脑的屏幕上,把Mac变成一个AirPlay终端的实用工具。 目前最新的AirServer 7.2…

Matlab技巧[绘画逻辑分析仪产生的数据]

绘画逻辑分析仪产生的数据 逻分上抓到了ADC数字信号,一共是10Bit,12MHZ的波形: 这里用并口协议已经解析出数据: 导出csv表格数据(这个数据为补码,所以要做数据转换): 现在要把这个数据绘制成波形,用Python和表格直接绘制速度太慢了,转了一圈发现MATLAB很好用,操作方法如下:…

Bag-of-Words(BoW)

Bag-of-Words(BoW)模型是一种用于自然语言处理(NLP)的基本文本表示方法。它的核心思想是将文本数据转化为一个"词袋",忽略文本中词语的顺序和语法,只关注词汇的出现与否。BoW模型通常包括以下步骤…

逗号表达式与赋值表达式

逗号表达式和赋值表达式是C语言中常用的表达式类型。它们可以用于各种目的,包括计算和评估表达式、初始化变量、为函数调用提供参数以及将值分配给变量。 逗号表达式 逗号表达式允许在单个语句中计算和评估多个表达式。逗号分隔每个表达式,并且表达式从…

力扣134. 加油站

迭代 思路: 暴力模拟迭代;假设从第 idx 个加油站开始,使用一个变量对行驶的加油站个数计数,如果最后行驶的个数为 size,则是可行的;否则,行驶过的加油站都不可行;(加快更…