Zookeeper入门(2)——Curator介绍与引入

二、Curator介绍与引入

Apache Curator

1、Curator是什么?

在这里插入图片描述
Apache Curator是Apache ZooKeeper的Java/JVM客户端库,这是一个分布式协调服务。它包括一个高级API框架和实用程序,使使用Apache ZooKeeper变得更容易和更可靠。它还包括常见用例和扩展功能,如服务发现和Java 8异步DSL。

2、Curator各个模块介绍

GroupID/OrgArtifactID/NameDescription
org.apache.curatorcurator-recipes包含curator的所有功能部分,包括curator-client、curator-framework等常用模块
org.apache.curatorcurator-async具有 O/R 建模、迁移和许多其他功能的异步 DSL
org.apache.curatorcurator-frameworkCurator的高级API接口
org.apache.curatorcurator-client替代 ZK 发布版本中的 ZooKeeper 类。
org.apache.curatorcurator-test包含 TestingServer、TestingCluster 和其他一些对测试有用的工具。
org.apache.curatorcurator-examples各种 Curator 功能的示例。
org.apache.curatorcurator-x-discovery基于 Curator 框架构建的服务发现实现。
org.apache.curatorcurator-x-discovery-server可与 Curator Discovery 一起使用的 RESTful 服务器。

DSL是 Domain Specific Language 的缩写,即领域特定语言,为了解决某一类任务而专门设计的计算机语言。

3、Curator引入

<properties>
    <curator.version>4.2.0</curator.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>${curator.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-test</artifactId>
        <version>${curator.version}</version>
    </dependency>
</dependencies>

4、Zookeeper客户端的使用

介绍curator之前首先介绍一个zkCli.sh的使用

命令作用示例
addauth给当前客户端添加授权信息addauth scheme auth
scheme:授权方式
auth:权限
close关闭当前连接close
config查看配置信息zoo.cfgconfig [-c] [-w] [-s]
connect连接到zk服务器connect host:port
create创建节点
-s:有序节点;
-e:临时节点
-c:容器节点
-t:TTL节点
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
data:存储在节点中的数据
acl:设置子节点访问权限
delete删除节点delete [-v version] path
-v:节点版本号(节点状态cversion的值)
deleteall删除所有节点deleteall path
delquota删除节点配额delquota [-n|-b] path
-n:删除子节点数量配额限制
-b:删除节点数据长度配额限制
get获取节点数据get [-s] [-w] path
getAcl获取节点ACLgetAcl [-s] path
-s:获取状态信息
history列出前最后10条命令history
listquota查询节点配额listquota path
Output quota:表示节点的配额信息,-1,表示不限制
Output stat:表示当前节点的状态信息
ls查询子节点列表ls [-s] [-w] [-R] path
-s:获取状态信息
-w:
-R:
ls2查询子节点列表及状态信息ls2 path [watch]
watch:是否监听子节点列表变化通知
printwatches打开或关闭监听日志printwatches on|off
quit退出客户端quit
reconfig重新配置集群reconfig [-s] [-v version] [[-file path] |
[-members serverID=host:port1:port2;port3[,…]]]
[-add serverId=host:port1:port2;port3[,…]]
[-remove serverId[,…]*]
redo执行历史命令redo cmdno
cmdno:历史命令编号
removewatches删除节点的监听机制removewatches path [-c|-d|-a] [-l]
rmr删除节点(包括子节点)rmr path
set设置节点数据set [-s] [-v version] path data
setAcl设置节点的ACL规则setAcl [-s] [-v version] [-R] path acl
setquota设置节点的配额setquota -n|-b val path
stat获取节点状态stat [-w] path
sync与leader同步数据sync path

在对某个znode进行读操作时,应该先执行sync方法,使得读操作的连接所连的zk实例能与leader进行同步,从而保证能读到最新的数据。
注意:sync调用是异步的,无需等待调用的返回,zk服务器会保证所有后续的操作会在sync操作完成之后才执行,哪怕这些操作是在执行sync之前被提交的。

在ZK中,ZK客户端对服务器每一个数据节点的写操作,ZK会认为都是一次完整的事务操作,要么成功,要么失败,保证了数据的原子性。而每次事务都会分配一个唯一的事务id,以标识这次事务操作的数据信息。下面详细理解一下节点状态各个字段的含义:

  • cZxid:创建节点的事务id

  • ctime:创建节点的时间

  • mZxid:修改节点的事务id

  • mtime:修改节点的时间

  • pZxid:子节点列表最后一次修改的事务id。删除或添加子节点,不包含修改子节点的数据。

  • cversion:子节点的版本号,删除或添加子节点,版本号会自增

  • dataVersion:节点数据版本号,数据写入操作,版本号会递增

  • aclVersion:节点ACL权限版本,权限写入操作,版本号会递增

  • ephemeralOwner:临时节点创建时的事务id,如果节点是永久节点,则它的值为0

  • dataLength:节点数据长度(单位:byte),中文占3个byte

  • numChildren:子节点数量

5、Curator创建ZKCli

下面是一个简单的使用curator创建一个zkcli的示例,并创建/configuration节点

public class Launcher {
    private static final String ZK_ADDRESS = "xxx.xxx.xxx.xxx:2181";
    public static void main(String[] args) {
        // 指定重试策略,最大重试三次,每次间隔1000ms
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
        // 创建zk客户端
		CuratorFramework client = CuratorFrameworkFactory.newClient(ZK_ADDRESS, retryPolicy);
        // 启动客户端连接
        client.start();
        try {
            // 创建zk节点
            client.create().forPath("/configuration");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值