• 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

  • 相关阅读:
    【Java】移除元素
    bug总结问题集和知识点集(一)
    【OpenCV】仿 IOS 锁屏时钟
    Js获取url里面的参数
    BLUE legend传奇引擎不使用路由器架设单传奇的办法
    22矩阵——向量范数和矩阵范数 : 矩阵范数与向量范数的相容、Numpy计算范数
    3.1 面向对象的思想
    Python高级_第3章_HTTP协议与静态Web服务器开发
    第十三章·外观模式
    软件产品测试的准入准出标准有哪些?
  • 原文地址:https://blog.csdn.net/firefox_1980/article/details/133421040