Zookeeper|部署与实战
Zookeeper重要概念&架构
数据模型和命名空间结构
ZK 的目录树结构有点类似文件系统,但是也有所区别

ZNode
ZK中称每一个注册到ZK的节点为 ZNode,每个 ZNode 之间通过/来进行分层,进行父子关系区分
每个 znode 包含了一个记录自身数据变化版本,访问权限控制,时间戳等的状态信息,用于缓存验证和一致性更新。每当 znode 的数据发生变化时,版本号会更新,因此任何一个客户端读取到 ZNode 的数据都包含了数据版本信息
ZNode 也有分很多类型,比较常用的是 Ephmeral 类型的节点,这种类型的节点会随着 服务节点和 ZK 连接会话的消亡而一起消亡,只要会话还保持心跳链接,这个 ZNode 就可以一致存在;如果会话结束,节点自动删除,节省资源
条件更新和 Watchers
ZK中的 Watch 类似事件驱动的消息
当 ZNode 发生变更时(通常就是断联),Watch 将会被触发和移除
当 Watch 触发时,客户端会受到 ZNode 发生变更的消息
3.6.0 以后支持客户端设置常驻Watcher,这种类型的Watcher在触发之后不会被删除,同时会触发关于某个 ZNode 和其所有子 ZNode 的消息
常见API
- create 在ZK维护的路径树上新增 ZNode
- delete
- exists 判断某个指定位置是否存在指定 ZNode
- get data 读取 ZNode 数据
- set data 写数据
- get childeren 获取某个 ZNode 下所有 ZNode
- sync 同步数据传播(?)
Docker部署Zookeeper最佳实践
单点部署
1 | |
CLI接口交互执行
1 | |
集群部署
TODO,目前暂时没有需求,一个 Docker-compose 即可在单机上拉集群,Kubernetes 应该可以部署多点集群
Spring Boot 整合 Curator
更多的时候还是通过项目的客户端接口来对 ZK 进行 ZNode 操作,项目使用的是 Curator
版本选择
Getting Started | Apache Curator
官方提供了预构建的 Curator Recipes 部署包
当然很多时候我们只是想要用 Curator 更方便的客户端包,只需要引用 Curator Framework 即可
获得连接
对于一个 ZK 的集群对象,只需要一个 CuratorFramework 实例
建议针对项目新增一个配置类,来映射配置文件的地址信息
在实例化客户端对象的时候需要的参数大致就是:
- ZK的ip:port
- 会话超时时间
- 连接超时时间
- 重试次数
1 | |
客户端实例对象 CuratorFramework 必须在使用前 start 不需要时 close
之后就是一些增删改查的基础 API 了
Curator 提供的 API 基本都是流式接口的规范,也就是链式调用
1 | |