编译Zookeeper源码以及使用

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 编译Zookeeper源码以及使用

GitHub地址:

https://github.com/apache/zookeeper

最新版本的 zookeeper 已经使用了 maven 进行管理了、不再需要安装 Ant

下载完成之后、使用 Idea 作为一个 maven 项目打开

拷贝配置文件

    • 拷贝zoo_sample.cfg文件至相同文件夹下,名为:zoo.cfg,配置全部使用默认;
    • 创建 /tmp/zookeeper 目录、用于存放 zk 数据.
    • 拷贝log4j.properties文件至:zookeeper-server/src/main/resources,文件名还是log4j.properties不变.
    • resource 标记为 Resources Root

    增加启动项

    找到类 org.apache.zookeeper.server.quorum.QuorumPeerMain

    在参数中加上 conf/zoo.cfgimage.gif编辑

    修改pom文件中scope

    scope 注释掉

    执行server

    执行 main 方法前建议执行命令 mvn clean install -DskipTests

    2020-05-11 23:51:27,731 [myid:] - INFO  [main:NIOServerCnxnFactory@664] - binding to port 0.0.0.0/0.0.0.0:2181
    2020-05-11 23:51:27,751 [myid:] - INFO  [main:WatchManagerFactory@42] - Using org.apache.zookeeper.server.watch.WatchManager as watchmanager
    2020-05-11 23:51:27,751 [myid:] - INFO  [main:WatchManagerFactory@42] - Using org.apache.zookeeper.server.watch.WatchManager as watchmanager
    2020-05-11 23:51:27,751 [myid:] - INFO  [main:ZKDatabase@132] - zookeeper.snapshotSizeFactor = 0.33
    2020-05-11 23:51:27,751 [myid:] - INFO  [main:ZKDatabase@152] - zookeeper.commitLogCount=500
    2020-05-11 23:51:27,757 [myid:] - INFO  [main:SnapStream@61] - zookeeper.snapshot.compression.method = CHECKED
    2020-05-11 23:51:27,759 [myid:] - INFO  [main:FileSnap@85] - Reading snapshot /tmp/zookeeper/version-2/snapshot.3
    2020-05-11 23:51:27,763 [myid:] - INFO  [main:DataTree@1730] - The digest in the snapshot has digest version of 2, , with zxid as 0x3, and digest value as 1371985504
    2020-05-11 23:51:27,774 [myid:] - INFO  [main:FileTxnSnapLog@363] - 1 txns loaded in 5 ms
    2020-05-11 23:51:27,774 [myid:] - INFO  [main:ZKDatabase@289] - Snapshot loaded in 23 ms, highest zxid is 0x4, digest is 1371985504
    2020-05-11 23:51:27,774 [myid:] - INFO  [main:FileTxnSnapLog@470] - Snapshotting: 0x4 to /tmp/zookeeper/version-2/snapshot.4
    2020-05-11 23:51:27,775 [myid:] - INFO  [main:ZooKeeperServer@522] - Snapshot taken in 1 ms
    2020-05-11 23:51:27,788 [myid:] - INFO  [main:RequestThrottler@75] - zookeeper.request_throttler.shutdownTimeout = 10000
    2020-05-11 23:51:27,802 [myid:] - INFO  [main:ContainerManager@83] - Using checkIntervalMs=60000 maxPerMinute=10000 maxNeverUsedIntervalMs=0
    2020-05-11 23:51:27,803 [myid:] - INFO  [main:ZKAuditProvider@42] - ZooKeeper audit is disabled.
    2020-05-11 23:51:58,403 [myid:] - INFO  [SessionTracker:ZooKeeperServer@603] - Expiring session 0x100016819530000, timeout of 30000ms exceeded
    2020-05-11 23:51:58,404 [myid:] - INFO  [SessionTracker:ZooKeeperServer@603] - Expiring session 0x10001651fa70000, timeout of 30000ms exceeded
    2020-05-11 23:51:58,407 [myid:] - INFO  [SyncThread:0:FileTxnLog@284] - Creating new log file: log.5

    image.gif

    启动成功

    执行client

    如 server 一般、配置入口类 org.apache.zookeeper.ZooKeeperMain

    将下面的依赖的 scope 注释掉

    <dependency>  
    <groupId>commons-cli</groupId>  
    <artifactId>commons-cli</artifactId>
    </dependency>

    image.gif

    启动

    Welcome to ZooKeeper!JLine support is disabled
    2020-05-11 23:54:50,732 [myid:localhost:2181] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1169] - Opening socket connection to server localhost/127.0.0.1:2181.
    2020-05-11 23:54:50,732 [myid:localhost:2181] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1171] - SASL config status: Will not attempt to authenticate using SASL (unknown error)
    2020-05-11 23:54:50,748 [myid:localhost:2181] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1001] - Socket connection established, initiating session, client: /127.0.0.1:59060, server: localhost/127.0.0.1:2181
    2020-05-11 23:54:50,769 [myid:localhost:2181] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1436] - Session establishment complete on server localhost/127.0.0.1:2181, session id = 0x10001a019010000, negotiated timeout = 30000WATCHER::WatchedEvent state:SyncConnected type:None path:nullls /[zookeeper]ls /zookeeper[config, quota]

    image.gif

    至此,已成功编译运行 zookeeper的源码


    相关实践学习
    基于MSE实现微服务的全链路灰度
    通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
    相关文章
    |
    6月前
    |
    存储 负载均衡 算法
    深入浅出Zookeeper源码(七):Leader选举
    对于一个分布式集群来说,保证数据写入一致性最简单的方式就是依靠一个节点来调度和管理其他节点。在分布式系统中我们一般称其为Leader。
    204 6
    |
    4月前
    |
    API
    【想进大厂还不会阅读源码】ShenYu源码-替换ZooKeeper客户端
    ShenYu源码阅读。相信大家碰到源码时经常无从下手,不知道从哪开始阅读😭。我认为有一种办法可以解决大家的困扰!至此,我们发现自己开始从大量堆砌的源码中脱离开来😀。ShenYu是一个异步的,高性能的,跨语言的,响应式的 API 网关。
    |
    6月前
    |
    存储 设计模式 算法
    深入浅出Zookeeper源码(六):客户端的请求在服务器中经历了什么
    当我们向zk发出一个数据更新请求时,这个请求的处理流程是什么样的?zk又是使用了什么共识算法来保证一致性呢?带着这些问题,我们进入今天的正文。
    175 1
    深入浅出Zookeeper源码(六):客户端的请求在服务器中经历了什么
    |
    6月前
    |
    Apache
    Apache ZooKeeper - 构建ZooKeeper源码环境及StandAlone模式下的服务端和客户端启动
    Apache ZooKeeper - 构建ZooKeeper源码环境及StandAlone模式下的服务端和客户端启动
    127 2
    |
    6月前
    |
    网络协议 数据库
    深入浅出Zookeeper源码(五):BadVersionException到底是怎么一回事
    最近在开发时偶尔会观测到zk报出`BadVersionException`,后在搜索引起上得知了是乐观锁相关的问题,很快就解决了问题。不过学而不思则罔:无论是单体应用还是分布式系统,在运行过程中总要有一种**机制**来保证数据排他性。接下来,我们就来看看zk是如何实现这种**机制**的。
    130 1
    |
    6月前
    |
    网络协议 数据库
    深入浅出Zookeeper源码(三):会话管理
    我们知道zookeeper是一个分布式协同系统。在一个大型的分布式系统中,必然会有大量的client来连接zookeeper。那么zookeeper是如何管理这些session的生命周期呢?带着这个问题,我们进入今天的正文。
    124 1
    |
    6月前
    |
    存储 设计模式 算法
    深入浅出Zookeeper源码(六):客户端的请求在服务器中经历了什么
    当我们向zk发出一个数据更新请求时,这个请求的处理流程是什么样的?zk又是使用了什么共识算法来保证一致性呢?带着这些问题,我们进入今天的正文。
    134 0
    |
    6月前
    |
    Java API 开发者
    深入浅出Zookeeper源码(四):Watch实现剖析
    用过zookeeper的同学都知道watch是一个非常好用的机制,今天我们就来看看它的实现原理。 在正文开始前,我们先来简单回忆一下watch是什么? zk提供了分布式数据的发布/订阅功能——即典型的发布订阅模型,其定义了一种一对多的订阅关系,能够让多个订阅者同时监听某个主题对象,当这个主题对象自身状态变化时,则会通知所有订阅者。具体来说,则是zk允许一个客户端向服务端注册一个watch监听,当服务端的一些指定事件触发了这个watch,那么就会向该客户端发送事件通知。
    111 0
    |
    6月前
    |
    存储 关系型数据库 MySQL
    深入浅出Zookeeper源码(二):存储技术
    在上篇文章中,我们简单提到了Zookeeper的几个核心点。在这篇文章中,我们就来探索其存储技术。在开始前,读者可以考虑思考下列问题: - Zookeeper的数据存储是如何实现的? - Zookeeper进行一次写操作的时候,会发生什么å? - 当一个Zookeeper新加入现有集群时,如何同步现集群中的数据?
    87 0
    |
    6月前
    |
    消息中间件 Java Shell
    Linux【脚本 03】shell脚本离线安装配置集结JDK+InfluxDB+Zookeeper+Kafka(安装文件及脚本源码网盘分享)
    Linux【脚本 03】shell脚本离线安装配置集结JDK+InfluxDB+Zookeeper+Kafka(安装文件及脚本源码网盘分享)
    61 0