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

相关推荐
风兮雨露1 分钟前
一建学习流程以及计划(附资料)
学习
星幻元宇VR37 分钟前
VR单人地震体验平台,学习科学避险
科技·学习·安全·vr·虚拟现实
坚持就完事了37 分钟前
Hadoop实战初步学习
hadoop·学习
for_ever_love__1 小时前
UI学习:多界面传值的正向传值(属性传值)和反向传值(代理传值)
学习·ui·ios·objective-c
zhangrelay1 小时前
蓝桥云课五分钟-通关自动控制-octave
笔记·学习
jiayong231 小时前
第 36 课:任务详情抽屉快捷改状态
开发语言·前端·javascript·vue.js·学习
笔夏2 小时前
【安卓学习之混淆】记录一些混淆导致闪退
android·学习
南境十里·墨染春水2 小时前
linux学习进展 进程间通讯——共享内存
linux·数据库·学习
光影少年2 小时前
中级前端需要会的东西都有那些?
前端·学习·前端框架
斯维赤2 小时前
Python学习超简单第八弹:连接Mysql数据库
数据库·python·学习