ZooKeeper的每个客户端都维护一组服务端信息,在创建连接时由应用指定,客户端随机选择一个服务端进行连接,连接成功后,服务端为每个连接分配一个唯一标识。客户端在创建连接时可以指定溢出时间,客户端会周期性的向服务端发送PING请求来保持连接,当客户端检测到与服务端断开连接后,客户端将自动选择服务端列表中的另一个服务端进行重连。客户端允许应用修改服务端列表,但修改可能导致客户端与服务端的重连。
连接状态转换
ZooKeeper使用session来表示客户端和服务端的连接。ZooKeeper的客户端管理一个可用的服务端列表,ZooKeeper客户端首先创建一个handle,handle建立后处于CONNECTING状态,然后客户端随机选择一个服务端进行连接,连接成功后,handle的状态更换到CONNECTED状态。如果出现无法恢复的错误,例如;会话终止或者认证失败,或者应用直接关闭handle,handle将转换到CLOSED状态。
下面是一个ZooKeeper客户端状态转化图:
创建session
创建客户端session时,应用必须传入一组以逗号分隔的host:port列表,每个都对应一个ZooKeeper服务端,ZooKeeper客户端将选择任意一个服务端并尝试与其连接&#