ZooKeeper的使用

引言

        在之前的学习中,了解了ZooKeeper的一些基本原理和概念。这篇文章中主要介绍ZooKeeper的使用。

前期准备

        ZooKeeper是基于Java语言开发的一个中间件,因此首先需要准备一个Java环境。至于操作系统,则不推荐在FreeBSD系统上部署,因为该系统的JVM对Java的NIO Selector支持并不是很友好。

        准备好上面的两个条件,即可安装ZooKeeper。首先下载安装包并进行解压,并将ZooKeeper的执行目录添加到系统变量中;其次重点关注zoo.cfg文件(初次安装后有一个zoo_sample.cfg文件,把这个文件改一下名字即可),这个文件是ZooKeeper的配置文件。如果需要组建集群还需要在dataDir目录下创建一个myid文件,文件第一行写上当前机器的id值。
        配置完成后使用zkServer.sh start | status | stop指令可以实现启动ZooKeeper、查看状态和停止ZooKeeper。

客户端的使用

        在机器上执行zkCli.sh脚本可以进入ZooKeeper的客户端,有一些比较常用指令在下文进行详细说明。

创建

        create命令,可以创建一个ZooKeeper节点。其中-s 或 -e表示当前节点是顺序节点还是临时节点,默认生成持久节点。

                 create [-s] [-e] path data acl

读取

        读取相关的指令有两个:ls和get。使用ls命令可以列出ZooKeeper指定节点下一级的所有子节点。使用get命令可以获取ZooKeeper指定节点保存的数据信息和属性信息。ls和get命令中的path表示指定的节点

        ls path         get path

更新

        使用set命令可以更新指定节点的数据。其中data是要更新的内容,set命令后面还有一个version参数,在ZooKeeper中节点的数据是有版本的概念,这个参数是用来指定对ZNode中哪一个版本的数据进行更新。

         set path data [version]

删除

是u哟功能delete命令可以删除ZooKeeper上指定的节点,这个命令中的version参数和set命令中的意思是一致的。

         delete path [version]

ZooKeeper客户端Curator使用

        Curator是Netflix 开源的 Java 客户端框架,功能丰富,封装了大量高级特性(如重试、锁、计数器等),是目前最主流、支持最好的第三方客户端。本节主要介绍一下Curator中的一些常见api及使用。

前期准备

        如果想要使用Curator需要额外引入Jar包。第一个Jar是Curator客户端的Jar,第二个Jar是Curator监听机制的Jar。

        <dependency>
        	<groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.0.1</version>
        </dependency>

创建客户端

        创建客户端通过CuratorFrameworkFactory.newClient()方法或者CuratorFrameworkFactory.builder()方法创建。创建客户端后需要调用start()方法启动客户端。在创建客户端的时候可以设置连接地址,以ip:port形式拼接,如果要连接多台机器则使用英文逗号分隔;还可以设置连接的超时时间、会话的超时时间、跟节点的名称、重试策略等信息。重试策略需要实现RetryPolicy接口。

CuratorFramework client = CuratorFrameworkFactory.builder()
            .connectString("127.0.0.1:2181")
            .namespace("test")
            .sessionTimeoutMs(5000)
            .retryPolicy(new ExponentialBackoffRetry(50, 3, 100))
            .build();

CRUD节点

create

        创建节点直接使用create()方法,create方法可以设置节点类型、回调方法、是否递归创建父节点、节点路径等属性。

String zNode = client.create().storingStatIn(stat)
                    .withMode(CreateMode.EPHEMERAL)
                    .inBackground(callback, threadPool)
                    .forPath("/nodeTest", "nodeTest".getBytes());
get

        调用getData()方法查询节点的数据,同时还可以通过storingStatIn()方法获取节点状态。

byte[] bytes = client.getData().storingStatIn(stat).forPath("/hjf");
posted @ 2026-01-04 15:17  阿斯拉达  阅读(9)  评论(0)    收藏  举报