千家信息网

Zookeeper该怎样入门

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,Zookeeper该怎样入门,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Zookeeper是什么官方文档上这么解释zookeeper,
千家信息网最后更新 2026年11月03日Zookeeper该怎样入门

Zookeeper该怎样入门,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Zookeeper是什么

官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

上面的解释有点抽象,简单来说zookeeper=文件系统+监听通知机制。

1、 文件系统

Zookeeper维护一个类似文件系统的数据结构:

每个子目录项如 NameService 都被称作为 znode(目录节点),和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。

有四种类型的znode:

  • 使用客户端命令操作zookeeper

  • 1、使用 ls 命令来查看当前 ZooKeeper 中所包含的内容

    2、创建一个新的 znode ,使用 create /zkPro myData

    3、再次使用 ls 命令来查看现在 zookeeper 中所包含的内容:

    4、下面我们运行 get 命令来确认第二步中所创建的 znode 是否包含我们所创建的字符串:

    5、下面我们通过 set 命令来对 zk 所关联的字符串进行设置:

    6、下面我们将刚才创建的 znode 删除


    使用Java API操作zookeeper

    使用Java API操作zookeeper需要引用下面的包

    下面我们来实现上面说的分布式配置中心:

    1、在zookeeper里增加一个目录节点,并且把配置信息存储在里面

    2、启动两个zookeeper客户端程序,代码如下所示

    import java.util.concurrent.CountDownLatch;

    import org.apache.zookeeper.WatchedEvent;

    import org.apache.zookeeper.Watcher;

    import org.apache.zookeeper.Watcher.Event.EventType;

    import org.apache.zookeeper.Watcher.Event.KeeperState;

    import org.apache.zookeeper.ZooKeeper;

    import org.apache.zookeeper.data.Stat;



    public class ZooKeeperProSync implements Watcher {


    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);

    private static ZooKeeper zk = null;

    private static Stat stat = new Stat();


    public static void main(String[] args) throws Exception {

    //zookeeper配置数据存放路径

    String path = "/username";

    //连接zookeeper并且注册一个默认的监听器

    zk = new ZooKeeper("192.168.31.100:2181", 5000, //

    new ZooKeeperProSync());

    //等待zk连接成功的通知

    connectedSemaphore.await();

    //获取path目录节点的配置数据,并注册默认的监听器

    System.out.println(new String(zk.getData(path, true, stat)));


    Thread.sleep(Integer.MAX_VALUE);

    }


    public void process(WatchedEvent event) {

    if (KeeperState.SyncConnected == event.getState()) { //zk连接成功通知事件

    if (EventType.None == event.getType() && null == event.getPath()) {

    connectedSemaphore.countDown();

    } else if (event.getType() == EventType.NodeDataChanged) { //zk目录节点数据变化通知事件

    try {

    System.out.println("配置已修改,新值为:" + new String(zk.getData(event.getPath(), true, stat)));

    } catch (Exception e) {

    }

    }

    }

    }

    }

    两个程序启动后都正确的读取到了zookeeper的/username目录节点下的数据'qingfeng'

    3、我们在zookeeper里修改下目录节点/username下的数据

    修改完成后,我们看见两个程序后台都及时收到了他们监听的目录节点数据变更后的值,如下所示


    Zookeeper集群模式安装

    本例搭建的是伪集群模式,即一台机器上启动三个zookeeper实例组成集群,真正的集群模式无非就是实例IP地址不同,搭建方法没有区别

    Step1:配置JAVA环境,检验环境:java -version

    Step2:下载并解压zookeeper

    # cd /usr/local# wget http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz# tar -zxvf zookeeper-3.4.12.tar.gz# cd zookeeper-3.4.12

    Step3:重命名 zoo_sample.cfg文件

    # cp conf/zoo_sample.cfg conf/zoo-1.cfg

    Step4:修改配置文件zoo-1.cfg,原配置文件里有的,修改成下面的值,没有的则加上

    # vim conf/zoo-1.cfgdataDir=/tmp/zookeeper-1clientPort=2181server.1=127.0.0.1:2888:3888server.2=127.0.0.1:2889:3889server.3=127.0.0.1:2890:3890

    配置说明

    • tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

    • initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒

    • syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10秒

    • dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。

    • clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

    • server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

    Step4:再从zoo-1.cfg复制两个配置文件zoo-2.cfg和zoo-3.cfg,只需修改dataDir和clientPort不同即可

    # cp conf/zoo-1.cfg conf/zoo-2.cfg# cp conf/zoo-1.cfg conf/zoo-3.cfg# vim conf/zoo-2.cfgdataDir=/tmp/zookeeper-2clientPort=2182# vim conf/zoo-2.cfgdataDir=/tmp/zookeeper-3clientPort=2183

    Step5:标识Server ID

    创建三个文件夹/tmp/zookeeper-1,/tmp/zookeeper-2,/tmp/zookeeper-2,在每个目录中创建文件myid 文件,写入当前实例的server id,即1.2.3

    # cd /tmp/zookeeper-1# vim myid1# cd /tmp/zookeeper-2# vim myid2# cd /tmp/zookeeper-3# vim myid3

    Step6:启动三个zookeeper实例

    # bin/zkServer.sh start conf/zoo-1.cfg# bin/zkServer.sh start conf/zoo-2.cfg# bin/zkServer.sh start conf/zoo-3.cfg

    Step7:检测集群状态,也可以直接用命令"zkCli.sh -server IP:PORT"连接zookeeper服务端检测

看完上述内容,你们掌握Zookeeper该怎样入门的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

服务 配置 服务器 文件 数据 客户 目录 集群 时间 客户端 端口 节点 命令 就是 不同 实例 长度 监听 两个 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小米移动互联网科技园 互联网科技工作委员会 互联网科技工作委员会毛军 河南真二互联网科技有限公司 智网互联网科技 互联网与未来科技 互联网科技小额贷款 伴你行互联网科技有限公司 广州紫鲸互联网科技 互联网 新科技 科技互联网创业计划书 互联网科技股有哪些 金融科技和互联网金融 顺网科技2021年互联网排名 欧洲十大科技互联网公司 江阴互联网智能科技产品进口 广东工业互联网大赛深圳学泰科技 互联网科技包装股份有限公司上市 科技信息时代互联网发展 山东蛋芒互联网科技有限公司 互联网与科技 关于新基建和互联网科技 科技服务与互联网 成都仁贤领冠互联网科技有限公司 江苏南京365互联网科技 福建科技产业互联网发展 工业互联网等科技实现智能化赋能 有人说阿里系是互联网科技企业 网互联网络科技 科技互联网企业在行动
0