写点什么

从一个 Demo 说起 Zookeeper 服务端源码

作者:宋小生
  • 2023-02-09
    上海
  • 本文字数:1349 字

    阅读完需:约 4 分钟

从一个Demo说起Zookeeper服务端源码

简介

Zookeeper 目前是 Apache 下的开源项目,作为最流行的分布式协调系统之一,我们平时开发中熟知的 Dubbo、Kafka、Elastic-Job、Hadoop、HBase 等顶级开源项目中的分布式协调功能都是通过借助 Zookeeper 来实现的,可以看到想要在生产中保障 Zookeeper 服务的稳定、快速排查系统问题,深入探究 Zookeeper 系统的原理是有必要的,那 Zookeeper 是什么呢?


ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,可用于实现高度可靠的分布式高性能协调的服务,Zookeeper 用于维护配置信息,命名,提供分布式同步以及提供组服务的集中式服务,使用 Zookeeper 可以实现共识,组管理,领导者选举和状态协议,也可以根据自己的需求来构建分布式应用功能。


作为分布式协调系统,Zookeeper 并没有直接采用 Paxos 算法,而是采用一种被称为 ZAB(ZooKeeper Atomic Broadcast)的一致性协议。


分布式算法比较抽象枯燥难懂,这里将通过一个内嵌的 Zookeeper 服务来启动 Zookeeper,方便分析调试,从 Zookeeper 的启动入门,探究一下 Zookeeper 源码。

入门

依赖


案例是通过一个 Java 应用程序来分析的,需要先新建一个 Maven 项目,然后我们引入 Zookeeper 的依赖,如下所示:


<dependency>    <groupId>org.apache.zookeeper</groupId>    <artifactId>zookeeper</artifactId>    <version>3.8.0</version></dependency>
复制代码


示例


入门案例是一个内嵌式的 Zookeeper 服务,通过运行 main 方法即可启动 Zookeeper 服务。


import org.apache.zookeeper.server.ServerConfig;import org.apache.zookeeper.server.ZooKeeperServerMain;import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
import java.io.IOException;import java.util.Properties;
public class EmbeddedZookeeper {
public static void main(String[] args) throws QuorumPeerConfig.ConfigException, IOException { //属性设置 Properties properties = new Properties(); //数据目录 properties.setProperty("dataDir", "/tmp"); //服务端口 properties.setProperty("clientPort", "2181");
//属性转为节点配置 QuorumPeerConfig quorumPeerConfig = new QuorumPeerConfig(); quorumPeerConfig.parseProperties(properties);
//服务端配置 ServerConfig configuration = new ServerConfig(); configuration.readFrom(quorumPeerConfig);
//运行Zookeeper服务 ZooKeeperServerMain zkServer = new ZooKeeperServerMain(); zkServer.runFromConfig(configuration); }}
复制代码


代码编写完成之后运行 main 方法即可启动 Zookeeper 服务,启动成功之后可以看到如下所示日志,可以看到 Zookeeper 绑定了 2181 端口。



客户端连接


Zookeeper 服务启动之后就可以使用客户端来建立连接创建节点了,如下所示 abc 是我新建的一个节点。


当然也可以输入 Zookeeper 的四字监控命令如 mntr 查看 Zookeeper 服务的一个状态。


总结

可以看到启动一个单机版的 Zookeeper 服务并不复杂只需要配置属性,启动服务即可,前面的整个案例仅仅是一个入门案例可以方便借助开发工具来 Debug 源码,清晰的了解代码执行过程,更多原理与源码解析可以订阅微信公众号 《中间件源码》 及时获取。

发布于: 刚刚阅读数: 3
用户头像

宋小生

关注

还未添加个人签名 2018-10-22 加入

还未添加个人简介

评论

发布
暂无评论
从一个Demo说起Zookeeper服务端源码_zookeeper_宋小生_InfoQ写作社区