zookeeper源码学习笔记(一)

一、缘起

1、CP还是AP

作为一个在大数据行业工作了7~8年的老兵,在被问到zookeeper和CAP时,竟然有些恍惚,AP还是CP?

看了一些博文,答案几乎都是CP?

zookeeper的实现中,P是一定的,A在zookeeper集群leeder故障时,也是不能保障的(即便在短时间选举了新的leader)。A不能满足,就一定满足C吗?

2、最终一致性的C

zookeeper保障顺序写入,如下图,leader发送Commit消息时,Follower A和Follower B的并不一定一致的。A的客户端和B的客户端看到的内容不完全一致。

因此,zookeeper解决的顺序写入,保障数据写入顺序是一致的。zookeeper实现的是最终一致性。

通过这个问题,让我有一种强烈的学习zookeeper源代码的冲动。

二、如何开始

zookeeper是开源项目,源代码在github上非常容易获得,如何阅读源代码呢?

1、下载源代码

在Idea中,使用git clone,把远端的代码下载到本地。

2、编译源代码

zookeeper主分支的代码,是可以编译和工作的。但在编译之前,需要mvn clean install -DskipTests。否则,直接在idea上编译会报错。

执行了mvn clean install -DskipTests之后,会把一些jar包安装到本地的repo。

3、入口函数

zookeeper是client、server架构,从代码的组织结构也能清晰的看到这一点。因此,在学习源代码的过程中,可以学习server、client的代码。

server入口函数

zookeeper/bin/zkServer.sh脚本:ZOOMAIN变量中java的入口类org.apache.zookeeper.server.quorum.QuorumPeerMain

QuorumPeerMain是zookeeper server的入口类。

client入口函数

zookeeper/bin/zkCli.sh脚本:java入口类

org.apache.zookeeper.ZooKeeperMain

相关推荐
卡卡~~5 分钟前
“101计划”核心课程实践教材《数据实验结构指导-C++语言版》题目集
开发语言·c++·学习·算法
lengxuenong1 小时前
树状数组 · 信息学学习手册1-求和3个模板
c++·学习·算法·青少年编程
ACP广源盛139246256731 小时前
PCIe Gen3 交换芯片选型笔记:中小通道扩展方案 IX7012@ACP 评估
笔记·硬件架构·硬件工程·pcie·国产芯片
lanxiaoqing022 小时前
演讲训练的第一步:先敢说,再会说
人工智能·学习·学习方法·口才
职豚求职小程序刷题2 小时前
国投证券笔试测评题型揭秘
笔记
Nuanyt2 小时前
LeetCode Hot100 刷题笔记 · 普通数组专题
java·笔记·算法·leetcode
职豚求职小程序3 小时前
蒙牛27秋招|数智化未来星测评重点整理✅
笔记
沪上企服通4 小时前
从票据到凭证的数据血缘:代账系统的 traceability 与可审计回放设计笔记
笔记
春弦_4 小时前
LeetCode Hot 100 刷题笔记
笔记·leetcode·哈希算法
m4Rk_4 小时前
【论文阅读】Agent记忆机制(109):MemComposer——用强化学习学会选哪些记忆、选多少以及怎样排序
论文阅读·人工智能·学习·开源·github