简介 前面我们看到LeaderLatch对于选举的实现:https://www.cnblogs.com/lay2017/p/10264300.html 节点在加入选举以后,除非程序结束或者close()退出选举,否则加点自加入选举以后将持续持有或者保持对主节点的竞争. recipes的另外一个实现Leader Election则不同,被选为主节点的节点任务如果执行完就会放弃主节点,然后由剩下的节点进行主节点竞争.如果你希望已经执行完的主节点再次加入主节点选举那么你需要调用autoRequeue(…
简介 在分布式计算中,主节点选举是为了把某个进程作为主节点来控制其它节点的过程.在选举结束之前,我们不知道哪个节点会成为主节点.curator对于主节点选举有两种实现方式,本文示例演示Latch的实现示例. 官方文档:http://curator.apache.org/curator-recipes/leader-latch.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/le…
1. master选举(LeaderSelector) 1)LeaderSelector构造函数 在leaderPath上建立分布式锁:mutex = new InterProcessMutex(client, leaderPath) 2)LeaderSelector.start 当前WorkServer参与master选举 若autoRequeue为ture,则当前WorkServer在未能获取leadership || 获取并释放leadership时,将自动进入下一轮master选举 3)…
简介 curator实现了类似DelayQueue的分布式延迟队列 官方文档:http://curator.apache.org/curator-recipes/distributed-delay-queue.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/queue/DistributedDelayQueue.html 代码示例 import org.apache.curat…
简介 curator的TreeCache允许对某个路径的数据和路径变更以及其下所有子孙节点的数据和路径变更进行监听. 官方文档:http://curator.apache.org/curator-recipes/tree-cache.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/cache/TreeCache.html 代码示例 import org.apache.curat…
简介 Curator的NodeCache允许你监听一个节点,当节点数据更改或者节点被删除的时候将会触发监听. 官方文档:http://curator.apache.org/curator-recipes/node-cache.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/cache/NodeCache.html 代码示例 import org.apache.curator.f…
简介 curator可以监听路径下子节点的变更操作,如创建节点,删除节点 官方文档:http://curator.apache.org/curator-recipes/path-cache.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/cache/PathChildrenCache.html 代码示例 import org.apache.curator.framework.C…
简介 官方文档:http://curator.apache.org/curator-recipes/distributed-priority-queue.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/queue/DistributedPriorityQueue.html 代码示例 import org.apache.curator.framework.CuratorFrame…
简介 curator实现了一种分布式ID队列,也是遵循FIFO原则,比普通队列新增的一个点是ID队列可以根据ID对队列元素进行操作,比如移除该元素. 官方文档:http://curator.apache.org/curator-recipes/distributed-id-queue.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/queue/DistributedIdQueu…
简介 curator实现了先入先出的分布式消息队列,它采用的是zookeeper的持久化有序节点. 官方文档:http://curator.apache.org/curator-recipes/distributed-queue.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/queue/DistributedIdQueue.html 代码示例 import org.apach…
简介 和Java的AtomicLong没有太大的不同DistributedAtomicLong旨在分布式场景中维护一个Long类型的数据,你可以像普通单机环境一样来使用它. 官方文档:http://curator.apache.org/curator-recipes/distributed-atomic-long.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/atomic/D…
简介 我们可以通过curator实现对一个分布式环境下共享变量的访问,zookeeper将共享变量维护在同一个路径下. 官方文档:http://curator.apache.org/curator-recipes/shared-counter.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/shared/SharedCount.html 代码示例 import org.apac…
简介 curator实现了单个屏障barrier和双重屏障DoubleBarrier,单个屏障就是在一个进程里面设置了屏障,并等待其它进程去移除这个屏障,否则一直阻塞.双重屏障就是设置了两道屏障,两个线程都到达第一个屏障的时候执行下面的内容,然后两个都到达第二个屏障的时候继续执行下面的内容. 官方文档:http://curator.apache.org/curator-recipes/double-barrier.html javaDoc:http://curator.apache.org/ap…
简介 curator实现了一个类似容器的锁InterProcessMultiLock,它可以把多个锁包含起来像一个锁一样进行操作,简单来说就是对多个锁进行一组操作.当acquire的时候就获得多个锁资源,否则失败.当release时候释放所有锁资源,不过如果其中一把锁释放失败将会被忽略. 官方文档:http://curator.apache.org/curator-recipes/multi-shared-lock.html javaDoc:http://curator.apache.org/a…
简介 跟Java并信号量没有什么不同,curator实现的信号量也是基于令牌桶算法,当一个线程要执行的时候就去桶里面获取令牌,如果有足够的令牌那么我就执行如果没有那么我就阻塞,当线程执行完毕也要将令牌放回桶里. 官方文档:http://curator.apache.org/curator-recipes/shared-semaphore.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/reci…
简介 recipes的InterProcessSemaphoreMutex是一种不可重入的互斥锁,也就意味着即使是同一个线程也无法在持有锁的情况下再次获得锁,所以需要注意,不可重入的锁很容易在一些情况导致死锁,比如你写了一个递归. 官方文档:http://curator.apache.org/curator-recipes/shared-lock.html javaDoc:http://curator.apache.org/curator-recipes/shared-lock.html 代码示…
简介 Java在单机环境实现了BlockQueue阻塞队列,与之类似的curator实现了分布式场景下的阻塞队列,SimpleDistributedQueue 官方文档:http://curator.apache.org/curator-recipes/simple-distributed-queue.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/queue/SimpleDi…
简介 curator针对分布式场景实现了分布式屏障:barrier.我们在分布式系统中可以使用barrier去阻塞进程,知道某个条件被触发.其实跟Java多线程的barrier是一样的. 例如:当两个进程在执行任务的时候,A调用了B,A需要等待B完成以后的通知 官方文档:http://curator.apache.org/curator-recipes/barrier.html JavaDoc:http://curator.apache.org/apidocs/org/apache/curato…
简介 curator的recipes实现了可重入互斥锁,允许你在分布式场景下多个进程之间实现锁的互斥以协调多进程执行. 相关类:InterProcessMutex 官方文档:http://curator.apache.org/curator-recipes/shared-reentrant-lock.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/locks/InterProc…
简介 curator实现了跨JVM的可重入读写互斥锁.它使用zookeeper去进行加锁,所以指定相同路径的处理线程将会基于“公平锁”的机制去竞争锁资源. 读写锁包含了读锁.写锁两个,它们的互斥关系如下: 1)读写互斥: 2)写写互斥: 3)读读不互斥. 重入性:读写锁是可以重入的,意味着你获取了一次读锁/写锁,那么你可以再次获取.但是要记得最后释放锁,获取了几次就得释放几次. 降级/升级:写锁可以降级成读锁,但是读锁不能升级成写锁否则会导致循环等待最终死锁. 官方文档:http://curat…
Cache 路径缓存(Path Cache) 监视一个ZNode,当子节点增加.更新.删除改变状态时,路径缓存会在本地保存当前子节点及其数据和状态. public PathChildrenCache(CuratorFramework client, String path, boolean cacheData) 参数: client 客户端实例 path 监视路径 cacheData 值为true时会缓存子节点数据 cache.start(); //开始缓存,start还有一种重载接受一个Sta…
Curator是Netflix公司开源的一个ZooKeeper client library,用于简化ZooKeeper客户端编程.它包含如下模块: Framework:Framework是ZooKeeper API的High-Level的封装,它让访问ZooKeeper更加简单.它基于ZooKeeper添加了一些新的特性,同时屏蔽了访问ZooKeeper集群在管理连接和重试操作方面的复杂度. Recipes:在Framework的基础上,实现了一些通用的功能,称之为“菜单”. Utilitie…
1.Apache Curator简介     Curator提供了一套Java类库,可以更容易的使用ZooKeeper.ZooKeeper本身提供了Java Client的访问类,但是API太底层,不宜使用,易出错.Curator提供了三个组件.Curator client用来替代ZOoKeeper提供的类,它封装了底层的管理并提供了一些有用的工具.Curator framework提供了高级的API来简化ZooKeeper的使用.它增加了很多基于ZooKeeper的特性,帮助管理ZooKeep…
curator简介 Netflix curator 是Netflix公司开源的一个Zookeeper client library,用于简化zookeeper客户端编程,包含一下几个模块: curator-client - zookeeper client封装,用于取代原生的zookeeper客户端,提供一些非常有用的客户端特性 curator-framework - zookeeper api的高层封装,大大简化zookeeper客户端编程,添加了例如zookeeper连接管理.重试机制等 c…
Apache ZooKeeper是为了帮助解决复杂问题的软件工具,它可以帮助用户从复杂的实现中解救出来. 然而,ZooKeeper只暴露了原语,这取决于用户如何使用这些原语来解决应用程序中的协调问题. 社区已经在ZooKeeper数据模型及其API之上开发了高级框架. Apache Curator是一个高级的包装类库和框架,使得ZooKeeper非常简单易用. Tips Curator最初由Netflix开发,现在是一个Apache项目. 项目页面位于http://curator.apache.…
Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeeper客户端的开发量. 1.引入依赖: <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.0</versio…
Apache ZooKeeper是为了帮助解决复杂问题的软件工具,它可以帮助用户从复杂的实现中解救出来. 然而,ZooKeeper只暴露了原语,这取决于用户如何使用这些原语来解决应用程序中的协调问题. 社区已经在ZooKeeper数据模型及其API之上开发了高级框架. Apache Curator是一个高级的包装类库和框架,使得ZooKeeper非常简单易用. Tips Curator最初由Netflix开发,现在是一个Apache项目. 项目页面位于http://curator.apache.…
Apache ZooKeeper是为了帮助解决复杂问题的软件工具,它可以帮助用户从复杂的实现中解救出来. 然而,ZooKeeper只暴露了原语,这取决于用户如何使用这些原语来解决应用程序中的协调问题. 社区已经在ZooKeeper数据模型及其API之上开发了高级框架. Apache Curator是一个高级的包装类库和框架,使得ZooKeeper非常简单易用. Tips Curator最初由Netflix开发,现在是一个Apache项目. 项目页面位于http://curator.apache.…
一.集群规划 搭建一个集群我们需要考虑如下几个问题: 1. 我们需要多大规模的集群? 2. 集群中的节点角色如何分配? 3. 如何避免脑裂问题? 4. 索引应该设置多少个分片? 5. 分片应该设置几个副本? 下面我们就来分析和回答这几个问题 1.我们需要多大规模的集群? 需要从以下两个方面考虑: 1.1 当前的数据量有多大?数据增长情况如何?1.2 你的机器配置如何?cpu.多大内存.多大硬盘容量? 推算的依据: ES JVM heap 最大可以设置32G . 30G heap 大概能处理的数据…
    这一篇文章我们将学习使用Curator来实现计数器.顾名思义,计数器是用来计数的,利用ZooKeeper可以实现一个集群共享的计数器.只要使用相同的path就可以得到最新的计数器值,这是由ZooKeeper的一致性保证的.Curator有两个计数器,一个是用int来计数,一个用long来计数. 1.SharedCount 1.SharedCount计数器介绍 这个类使用int类型来计数. 主要涉及三个类. SharedCount - 管理一个共享的整数.所有看同样的路径客户端将有共享的整…