Zookeeper客户端Curator使用详解

[TOC]

维护多个博客比较麻烦,和博客园放弃维护,后续在个人博客持续更新:

Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等等。Patrixck Hunt(Zookeeper)以一句“Guava is to Java that Curator to Zookeeper”给Curator予高度评价。

引子和趣闻:

Zookeeper名字的由来是比较有趣的,下面的片段摘抄自《从PAXOS到ZOOKEEPER分布式一致性原理与实践》一书:

Zookeeper最早起源于雅虎的研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型的系统需要依赖一个类似的系统进行分布式协调,但是这些系统往往存在分布式单点问题。所以雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架。在立项初期,考虑到很多项目都是用动物的名字来命名的(例如著名的Pig项目),雅虎的工程师希望给这个项目也取一个动物的名字。时任研究院的首席科学家Raghu Ramakrishnan开玩笑说:再这样下去,我们这儿就变成动物园了。此话一出,大家纷纷表示就叫动物园管理员吧——因为各个以动物命名的分布式组件放在一起,雅虎的整个分布式系统看上去就像一个大型的动物园了,而Zookeeper正好用来进行分布式环境的协调——于是,Zookeeper的名字由此诞生了。

Curator无疑是Zookeeper客户端中的瑞士军刀,它译作"馆长"或者''管理者'',不知道是不是开发小组有意而为之,笔者猜测有可能这样命名的原因是说明Curator就是Zookeeper的馆长(脑洞有点大:Curator就是动物园的园长)。

Curator包含了几个包:

curator-framework: 对zookeeper的底层api的一些封装

curator-client: 提供一些客户端的操作,例如重试策略等

curator-recipes: 封装了一些高级特性,如:Cache事件监听、选举、分布式锁、分布式计数器、分布式Barrier等

Maven依赖(使用curator的版本:2.12.0,对应Zookeeper的版本为:3.4.x, 如果跨版本会有兼容性问题,很有可能导致节点操作失败 ):

一个例子如下:

newClient静态工厂方法包含四个主要参数:

核心参数变为流式设置,一个列子如下:

为了实现不同的Zookeeper业务之间的隔离,需要为每个业务分配一个独立的命名空间( NameSpace ),即指定一个Zookeeper的根路径(官方术语: 为Zookeeper添加“Chroot”特性 )。例如(下面的例子)当客户端指定了独立命名空间为“/base”,那么该客户端对Zookeeper上的数据节点的操作都是基于该目录进行的。通过设置Chroot可以将客户端应用与Zookeeper服务端的一课子树相对应,在多个应用共用一个Zookeeper集群的场景下,这对于实现不同应用之间的相互隔离十分有意义。

当创建会话成功,得到client的实例然后可以直接调用其start( )方法:

Zookeeper的节点创建模式:

**创建一个节点,初始内容为空 **

注意:如果没有设置节点属性,节点创建模式默认为持久化节点,内容默认为空

创建一个节点,附带初始化内容

创建一个节点,指定创建模式(临时节点),内容为空

创建一个节点,指定创建模式(临时节点),附带初始化内容

创建一个节点,指定创建模式(临时节点),附带初始化内容,并且自动递归创建父节点

这个creatingParentContainersIfNeeded()接口非常有用,因为一般情况开发人员在创建一个子节点必须判断它的父节点是否存在,如果不存在直接创建会抛出NoNodeException,使用creatingParentContainersIfNeeded()之后Curator能够自动递归创建所有所需的父节点。

删除一个节点

注意,此方法只能删除 叶子节点 ,否则会抛出异常。

删除一个节点,并且递归删除其所有的子节点

删除一个节点,强制指定版本进行删除

删除一个节点,强制保证删除

guaranteed()接口是一个保障措施,只要客户端会话有效,那么Curator会在后台持续进行删除操作,直到删除节点成功。

注意: 上面的多个流式接口是可以自由组合的,例如:

读取一个节点的数据内容

注意,此方法返的返回值是byte[ ];

读取一个节点的数据内容,同时获取到该节点的stat

更新一个节点的数据内容

注意:该接口会返回一个Stat实例

更新一个节点的数据内容,强制指定版本进行更新

注意:该方法返回一个Stat实例,用于检查ZNode是否存在的操作. 可以调用额外的方法(监控或者后台处理)并在最后调用forPath( )指定要操作的ZNode

注意:该方法的返回值为List<String>,获得ZNode的子节点Path列表。 可以调用额外的方法(监控、后台处理或者获取状态watch, background or get stat) 并在最后调用forPath()指定要操作的父ZNode

CuratorFramework的实例包含inTransaction( )接口方法,调用此方法开启一个ZooKeeper事务. 可以复合create, setData, check, and/or delete 等操作然后调用commit()作为一个原子操作提交。一个例子如下:

上面提到的创建、删除、更新、读取等方法都是同步的,Curator提供异步接口,引入了 BackgroundCallback 接口用于处理异步接口调用之后服务端返回的结果信息。 BackgroundCallback 接口中一个重要的回调值为CuratorEvent,里面包含事件类型、响应吗和节点的详细信息。

CuratorEventType

响应码(#getResultCode())

一个异步创建节点的例子如下:

注意:如果#inBackground()方法不指定executor,那么会默认使用Curator的EventThread去进行异步处理。

提醒:首先你必须添加curator-recipes依赖,下文仅仅对recipes一些特性的使用进行解释和举例,不打算进行源码级别的探讨

重要提醒:强烈推荐使用ConnectionStateListener监控连接的状态,当连接状态为LOST,curator-recipes下的所有Api将会失效或者过期,尽管后面所有的例子都没有使用到ConnectionStateListener。

Zookeeper原生支持通过注册Watcher来进行事件监听,但是开发者需要反复注册(Watcher只能单次注册单次使用)。Cache是Curator中对事件监听的包装,可以看作是对事件监听的本地缓存视图,能够自动为开发者处理反复注册监听。Curator提供了三种Watcher(Cache)来监听结点的变化。

Path Cache用来监控一个ZNode的子节点. 当一个子节点增加, 更新,删除时, Path Cache会改变它的状态, 会包含最新的子节点, 子节点的数据和状态,而状态的更变将通过PathChildrenCacheListener通知。

实际使用时会涉及到四个类:

通过下面的构造函数创建Path Cache:

想使用cache,必须调用它的 start 方法,使用完后调用 close 方法。 可以设置StartMode来实现启动的模式

......to be continue

1.生命是充满缺陷的,消除所有的缺陷就等于夺取了故事的生命,一个有瑕疵但活生生的故事远比一个“完美”的故事更加有力量。

2.在错误面前,个性是那么渺小和无力。

3.“可我呢,后娘般的苍天把我抛到社会的最底层,给了我一颗高贵的心,却没有给我一千法郎的年金,也就是说没给我面包,不折不扣地没给我面包;而我且拒绝送上门来的快乐!我如此艰难地穿越这片充斥着平庸的灼热沙漠,却要拒绝能够给解决我的干涸的一泓清泉!真的,别这么傻了;在人们称为生活的这片自私自利的沙漠里,人认为自几。”

下篇 十三章 《阴谋》

4.这可高傲而冷酷的心灵第一次受到热烈的感情的裹挟。但是,这预热烈的感情虽然制服了骄傲,却仍旧终于骄傲的种种畏惧。

5.幸福不时地占据他的心,就像一个年轻少尉有了什么惊人之举,一下被司令官提升为上校了。

6.他的记忆是残酷的,开始纤毫毕露地为他重现那天夜里的情景。

7.想随便什么人讨主意,倾诉痛苦,这可能是一种幸福,可以比作一个穿越炎热沙漠的不幸的人,突然从天上接到一滴冰水。

8.然而理智已经不再对他的行动有任何威力了。一种盲目的本能驱使他延缓对生命作出决定。

9.那些残酷的话,她也是第一次不需要冥思苦想就如此得意地脱口而出。

10.玛渧蒂德望着他,他经受住了她的目光,至少他希望他的面孔没有出卖他。他感到爱情已经渗透到他的心最隐秘的皱劈中去了。

11.他用绝非臆造的色彩向她描绘他当时的极度绝望。

12.在有法律之前,只有狮子的力气,饥饿寒冷的生物需要的需要才是自然的,一句话,需要……不,受他人敬重的那些人,不过是那些犯罪时侥幸未被当场捉住的坏蛋罢了。

13.如果我必须跟她闹翻,那么我先来维护我的骄傲所拥有的正当权利,比起我对个人尊严应尽的职责稍有疏忽而立刻招来轻蔑的表示之后再加以抵制,不是要好些吗?

14.她的玩笑哪么有分寸,选的那么好,表面上那么得体,来的那么适时,让人越想越觉得伤口每时每刻都在扩大。

15.他需要做点体力上的事,好从那块要是他发狂的喜悦中解脱出来。

16.明天我比吃饭可,这丝毫也不妨碍我像今天一样健壮敏捷。

17.他们嫉妒我哪点可怜的口才。

18.人们做着最残忍的事,却没有残忍的精神。

19.反正我觉得您目光的大胆不太礼貌。

20.他对轻松的嘲笑所具有的那种送热的微妙还不大敏感。

21.于连怀着痛苦的野心激发出的全部热情抓紧各样各样的工作。

22.敢讲极猥亵的趣闻,而且是纤毫毕露,绘声绘色,机制和才华都要贬值百分之二十。

23.我敢打赌,思想深刻的先生,您都没有猜到您为什么去英国。

24.很好,这就是诱惑的艺术。

25.十九世纪不大有真正的激情了,因此人们在法国才这么厌倦。

26.难道您竟自负到自认为比他还有才干吗?

27.这个版本经过修改,还能用一个或两个世纪。

28.我可以蔑视世界上任何危险,眉头都不皱一皱。

29.黎明已经开始清晰地画出维里埃东部山上纵树林的轮廓。

30.虽然我的心在颤抖,我决心……

31.去巴黎的辛福驱散了一切。

32.我的孩子(指于连),我对你很有感情,上天知道这是没有办法的事。嫉妒和诽谤将对你穷追不舍。

33.如果他得了第一名,那是出于疏忽。

34.那些让人站着都能睡着的蠢话。

35.使出两肺全部的力量,大叫才能感到那种吵吵闹闹的快乐,才感到表达的完全。

35.足以使脆弱的人神经错乱。

36.要不是我怕毁了我见过的最美的男低音,我早就……

37.在这一条上我是不开玩笑的。

38.不要玩弄我的单纯。

39.每个人的心底都有一座坟墓,是用来埋葬所爱的人的。

40.他心中盛满的宝藏膨胀得要爆发出来,因为他的思想已积累了许多没有开启的念头。

41.但是他年轻的血沸腾着不允许他在这种烟雾似的梦幻中浪费太多时光。他已经厌倦了这虚无缥缈的占有,他渴望抓住梦境。

42.等待的过程会有一种悲怆痛快的感觉在身上蔓延,虽然你受着压迫,浑身难受,可是你感到整个宇宙的烈火都在你的血管里燃烧。灵魂如同埋在酒桶里的葡萄在锅炉里陶醉地沸腾。

43.新事物的香味太过浓郁,他们虚脱的头脑受不了,必须靠时光冲淡这一味道。艺术品一定要积满成年灰尘后才会有人领悟。

44.如果他想到不应该做某件事,那件事就像偏执狂一样倔强地把他死死抓住。

本文来自作者[浅墨入画]投稿,不代表博利网立场,如若转载,请注明出处:https://boliduo.cc/bl/2697.html

(21)

文章推荐

  • 十三陵旅游攻略 十三陵好玩吗

    十三陵不是好玩。十三陵是明清两代皇帝的陵墓所在地,也是中国古代皇家陵墓中最大的一个群体。十三陵景区拥有着丰富的历史文化底蕴,是一处具有深厚文化内涵的景点。下面具体介绍一下景点和旅游攻略:一、景点介绍明十三陵坐落于北京市昌平区天寿山麓,总面积一百二十余平方公里,自永乐七年也就是1409年五月始作长陵,

    2025年08月16日
    18
  • 无敌双头鲨游戏机的无敌双头鲨游戏机故障说明

    1、双响双头鲨游戏机在游戏过程中?下边的WIN和COINS随之运动?一般是由于U116(74LS74)器件坏?影响到U75(16V8)的输入不正常所致?也可能是6845的7P和8P短路引起?更换后?一切正常。2、开机后易死机?是U63(74HC245)速度快所致?U63必须用74LS245?不可用H

    2025年08月19日
    26
  • 国内口碑最好的护肤品

    根据2019年的国内护肤品排行榜:佰草集、美加净、清妃、韩束、百雀羚、韩后、自然堂、温碧泉、珀莱雅PROYA、相宜本草。1、佰草集:佰草集是上海家化公司1998年推向市场的一个具有全新概念的品牌,是中国第一套具有完整意义的现代中草药中高档个人护理品。她以中草药添加剂为特色,秉承了中国美容经典的精髓,

    2025年08月26日
    18
  • 爽肤水怎么二次清洁

    爽肤水怎么二次清洁 爽肤水怎么二次清洁,想要好的肌肤,日常清洁护肤是非常关键的,好的清洁护肤可以让皮肤很好吸收养分。从而促使皮肤变光滑。下面分享一篇关于爽肤水怎么二次清洁的相关信息。 爽肤水怎么二次清洁1 爽肤水可以再次清洁以恢复肌肤表面的酸碱值。 

    2025年09月04日
    17
  • 车间安全小知识

    1.车间的安全知识有哪些原发布者:house挚爱妍心1、工作时请穿好工作服、佩戴好厂牌,不得穿凉鞋、拖鞋、高跟鞋、背心、裙子和露膝盖的裤子进入车间,打线班若是长发要戴帽子或发网。2、严禁在车间内嬉戏、打闹,严禁在车间穿梭。3、认真佩带和正确使用劳动保护用品。4、必须严格遵守危险性作业

    2025年09月18日
    20
  • 低碳生活我能行手抄报内容

    低碳生活是指减少二氧化碳排放量,进行低能量、低消耗和低开支的生活方式,提倡绿色、低碳的生活方式,可以提高个人的生活品质。这期环保科普生态环境小编将会为您介绍几种绿色低碳的生活方式。1、绿色出行,节能低碳。鼓励践行“3510”出行:3公里内步行、5公里内骑车、10公里内或室内活动选择公共出行等绿色低碳

    2025年09月29日
    17
  • 夏季挑选什么防晒霜好?

    防晒的方法有很多,使用防晒霜是比较简单有效的防晒方式,夏季的时候,紫外线比较强烈,很多人会用到防晒霜,防晒霜有很多品牌可以选择,而且还有不同的系数,有些人不知道怎么选好,那么夏季挑选什么防晒霜好?挑选防晒霜的技巧有哪些?1、夏季用什么防晒霜好1、全波段防护。2、安全性、化学稳定性、光稳定性俱佳。3、

    2025年10月05日
    20
  • 环游世界八十天的内容梗概

    1872年10月2日,菲利亚·福格以巨额赌注同朋友们打了个赌:在80天内环游地球一周。当晚,他就带了法国籍仆人万事通离开伦敦,开始了这次不寻常的旅行。这件事轰动了全国。在福格出发后的第7天,英国国家银行失窃了一笔巨款,苏格兰侦探费克斯发现福格的特征同警察局调查出来的窃贼的外貌特点一模一样。福格不为挫

    2025年10月09日
    21
  • 冬至的手抄报怎么做

    做冬至手抄报的方法:在画纸的正上方写标题;在画纸的左上方写小标题;在小标题下面具体介绍冬至节气的由来;在画纸的右上方写小标题;在小标题下面具体介绍冬至节气的习俗;在加上与冬至有关的图案和装饰。冬至,又称“冬节”、“贺冬”,华夏二十四节气之一、八大天象类节气之一,与夏至相对。冬至在太阳到达黄经270°

    2025年10月11日
    18
  • 雅姿细致修护精华乳怎么用

    雅姿细致修护精华乳,针对肌肤还是会有很好的修护效果,其中包含了不错的修护成分,能进一步的加强毛孔自我的修护,而且还能激发肌肤的校验蛋白,这样就能让肌肤变得更加细腻,更加嫩滑,尤其是还能变得更加饱满,更加紧致,加上其中包含的控油成分,也是可以抑制过多的油脂分泌,有不错的护肤效果,对受损的肌肤有修复作用

    2025年11月05日
    110

发表回复

本站作者后才能评论

评论列表(4条)

  • 浅墨入画
    浅墨入画 2025年09月20日

    我是博利网的签约作者“浅墨入画”!

  • 浅墨入画
    浅墨入画 2025年09月20日

    希望本篇文章《Zookeeper客户端Curator使用详解》能对你有所帮助!

  • 浅墨入画
    浅墨入画 2025年09月20日

    本站[博利网]内容主要涵盖:生活百科,小常识,生活小窍门,知识分享

  • 浅墨入画
    浅墨入画 2025年09月20日

    本文概览:[TOC] 维护多个博客比较麻烦,和博客园放弃维护,后续在个人博客持续更新: Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zo...

    联系我们

    邮件:博利网@sina.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们