客户端是开发人员使用ZooKeeper最主要的途径,因此我们有必要对ZooKeeper客户端的内部原理进行详细讲解。ZooKeeper的客户端主要由以下几个核心组件组成。
- ZooKeeper实例:客户端的入口。
- ClientWatchManager:客户端Watcher管理器。
- HostProvider:客户端地址列表管理器。
- ClientCnxn:客户端核心线程,其内部又包含两个线程,即SendThread和EventThread。前者是一个I/O线程,主要负责ZooKeeper客户端和服务端之间的网络I/O通信;后者是一个事件线程,主要负责对服务端事件进行处理。
客户端的整个初始化和启动过程大体可以分为以下三个步骤。
1.设置默认Watcher。
2.设置ZooKeeper服务器地址列表。
3.创建ClientCnxn。
一次会话的创建过程
初始化阶段
- 初始化ZooKeeper对象。
- 设置会话默认Watcher。
- 构造ZooKeeper服务器地址列表管理器:HostProvider。
- 创建并初始化客户端网络连接器:ClientCnxn。
- 初始化SendThread和EventThread。
会话创建阶段
- 启动SendThread和EventThread
- 获取一个服务器地址。
- 创建TCP连接。
- 构造ConnectRequest请求。
- 发送请求。
响应处理阶段
- 接受服务端响应
- 处理Response
- 连接成功
- 生成事件:SyncConnected-None
- 查询Watcher
- 处理事件