赞
踩
Apache Curator是Apache ZooKeeper的Java/JVM客户端库,这是一个分布式协调服务。它包括一个高级API框架和实用程序,使使用Apache ZooKeeper变得更容易和更可靠。它还包括常见用例和扩展功能,如服务发现和Java 8异步DSL。
GroupID/Org | ArtifactID/Name | Description |
---|---|---|
org.apache.curator | curator-recipes | 包含curator的所有功能部分,包括curator-client、curator-framework等常用模块 |
org.apache.curator | curator-async | 具有 O/R 建模、迁移和许多其他功能的异步 DSL |
org.apache.curator | curator-framework | Curator的高级API接口 |
org.apache.curator | curator-client | 替代 ZK 发布版本中的 ZooKeeper 类。 |
org.apache.curator | curator-test | 包含 TestingServer、TestingCluster 和其他一些对测试有用的工具。 |
org.apache.curator | curator-examples | 各种 Curator 功能的示例。 |
org.apache.curator | curator-x-discovery | 基于 Curator 框架构建的服务发现实现。 |
org.apache.curator | curator-x-discovery-server | 可与 Curator Discovery 一起使用的 RESTful 服务器。 |
DSL是 Domain Specific Language 的缩写,即领域特定语言,为了解决某一类任务而专门设计的计算机语言。
<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>
介绍curator之前首先介绍一个zkCli.sh的使用
命令 | 作用 | 示例 |
---|---|---|
addauth | 给当前客户端添加授权信息 | addauth scheme auth scheme:授权方式 auth:权限 |
close | 关闭当前连接 | close |
config | 查看配置信息zoo.cfg | config [-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 | 获取节点ACL | getAcl [-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:子节点数量
下面是一个简单的使用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(); } } }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。