代码::https://gitee.com/jly521/ZooKeeper-book.git
开源的ZooKeeper 客户端
- 封装了很多底层细节
- Apache 顶级项目
- 还提供了ZooKeeper各种应用场景:
- Recipe共享锁服务
- Master选举机制
- 分布式计数器
- 等等
创建会话
public static void main(String[] args) throws Exception{
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework client =
CuratorFrameworkFactory.newClient("192.168.48.133:2181",
5000,
3000,
retryPolicy);
client.start();
Thread.sleep(Integer.MAX_VALUE);
}
- 重试策略
- 使用Fluent风格的API接口来创建一个ZooKeeper客户端
- 命名空间隔离
- guaranteed() 接口
- 客户端碰到网络异常的时候,会不停的重试删除需要删除的节点,知道成功
- 异步接口
Curator 典型应用场景:
- 事件监听
- NodeCache
- Master 选举
- 我们经常遇到这样的问题,遇到复杂的问题需要从集群中选择一台进行处理
- 比如:多台客户端机器同时某节点创建相同自己节点,最终只有一台能成功创建
- 成功创建的那台客户端机器叫做Master
- Curator进行了封装,只需要简单的api 就可实现Master 选举
- 成功获取Master 权力会回调监听器
- 执行完takeLeadership 方法,会自动释放Master 权力
- 分布式锁
- 分布式环境中,为了保证数据的一致性,经常在程序的某个运行点需要同步
- 比如减库存操作或流水号生成操作
- 例如流水号:
- 普通的流水号生成使用时间戳,但是在并发量过大的情况下会出现问题
- 可使用Curator 实现分布式锁
- 分布式环境中,为了保证数据的一致性,经常在程序的某个运行点需要同步
- 分布式计数器
- 很容易基于分布式锁实现一个分布式计数器
- 分布式Barrier
- 控制多线程之间同步的经典方式,类比jdk自带的CyclicBarrier
- 等待所有线程准备就绪,一起开始执行新的任务
- 还可协调同时进入同时退出
工具
- ZKPaths
- 提供了一个简单的API 来构建ZNode路径、递归创建、删除节点等;
- EnsurePath
- 提供了一种能够确保数据节点存在的机制
- TestServer
- 为了方便开发人员进行方便测试
- 提供启动简易ZooKeeper方法:TestServer
- 允许开发人员非常方便启动一台标准的ZooKeeper服务器,进行单元测试
- 本地模拟
- TestCluster
- 本地模拟测试集群