Zookeeper客户端框架Curator的使用

阅读数:197 评论数:0

跳转到新版页面

分类

python/Java

正文

一、概述

Curator是Netflix公司开源一套Zookeeper客户端框架,它对Zookeeper原生API进行了封装,还提供了一些应用场景。

1、netflix公司

Netflix是一家美国公司,是一家专门提供在线流媒体订阅服务的公司,其主要业务是通过互联网向观众提供电影、电视剧、纪录片、动画片等在线串流视频服务。

开源过数据管道服务Suro、分布式系统的延迟和容错库Hystrix、微服务编排引擎Conductor。

2、curator项目组件

Recipes 典型应用场景的实现,这些实现是基于CuratorFramework。
Framework Zookeeper API的高层封装,大大简化了客户端编程。
Utilities 各种实用程序。
Client zookeeper client的封装。
Errors  错误处理。

二、基本使用

1、maven依赖

根据上面的描述,大多数情况下使用的都是Curator-recipes的依赖。

GroupID/Org ArtifactID/Name 描述
org.apache.curator curator-recipes 所有典型应用场景。需要依赖client和framework,需设置自动获取依赖。
org.apache.curator curator-framework 同组件中framework介绍。
org.apache.curator curator-client 同组件中client介绍。
org.apache.curator curator-test 包含TestingServer、TestingCluster和一些测试工具。
org.apache.curator curator-examples 各种使用Curator特性的案例。
org.apache.curator curator-x-discovery 在framework上构建的服务发现实现。
org.apache.curator curator-x-discoveryserver 可以和Curator Discovery一起使用的RESTful服务器。
org.apache.curator curator-x-rpc Curator framework和recipes非java环境的桥接。

2、创建会话

Curator创建客户端是通过CuratorFrameworkFactory工厂类来实现的,此工厂类提供了三种创建客户端的方法

// 方式一
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3);
CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181",retryPolicy);
client.start();

// 方式二
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3);
CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181",
                5000,1000,retryPolicy);
client.start();

//方式三
RetryPolicy retryPolicy  = new ExponentialBackoffRetry(1000,3);
CuratorFramework Client = CuratorFrameworkFactory.builder()
            .connectString("hadoop1:2181,hadoop2:2181,hadoop3:2181")
            .sessionTimeoutMs(3000)
            .connectionTimeoutMs(5000)
            .retryPolicy(retryPolicy)
            .build();
​
client.start();
client.blockUntilConnected();

(1)connectString:zk的server地址,多个server之间使用英文逗号分隔开。

(2)connectionTimeoutMs:连接超时时间,默认是15s

(3)sessionTimeoutMs:会话超时时间,默认是60s

(4)retryPolicy:失败重试策略

sleep时间 = $baseSleepTimeMs\times Math.max(1,random.nextInt(1<<(retryCount+1)))$

maxRetries是最大重试次数

(5)start()开始创建会话

(6)blockUntilConnected()直到连接成功或超时

3、创建节点

Curator默认创建的是持久节点,内容为空。

(1)创建一个初始内容为空的节点

client.create().forPath(path);

(2)创建一个包含内容的节点

client.create().forPath(path,"test".getBytes());

(3)创建临时节点,并递归创建父节点

client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath(path);
//此处Curator和ZkClient一样封装了递归创建父节点的方法。在递归创建父节点时,父节点为持久节点。

4、删除节点

(1)删除一个子节点

client.delete().forPath(path);

(2)删除节点并递归删除其子节点

client.delete().deletingChildrenIfNeeded().forPath(path);

(3)指定版本进行删除

client.delete().withVersion(1).forPath(path);
​
//如果版本不存在,则删除异常,信息如下:
org.apache.zookeeper.KeeperException$BadVersionException: KeeperErrorCode = BadVersion for

(4)强制保证删除一个节点

client.delete().guaranteed().forPath(path);

5、读取数据

(1)普通查询

client.getData().forPath(path);

(2)包含状态查询

Stat stat = new Stat();

client.getData().storingStatIn(stat()).forPath(path);

6、更新数据

// 普通更新
client.setData().forPath(path,"新内容".getBytes());
​
// 指定版本更新
client.setData().withVersion(1).forPath(path,"新内容".getBytes());
​
更新出错,版本不一致异常:
org.apache.zookeeper.KeeperException$BadVersionException: KeeperErrorCode = BadVersion for

 




相关推荐

这个类会监控ZK的一个路径,路径下所有的节点变化,数据变动都会被响应,可以通过注册自定义监听器来添加逻辑。 关键API <pre class="language-jav

zookeeper从3.5.0开始,增加一个AdminServer。 The AdminServerNew in 3.5.0: The Adm