Zookeeper的客户端具有自动重连机制,当出现网络异常时,客户端会自动重连直到与集群中的某台机器连接成功,连接过程如下图所示:
断线重连机制
1. 网络异常情况包括网络闪断、ZK服务器宕机等情况,这会导致连接断开CONNECTION_LOSS,此时客户端会收到事件None-Disconnected;
2. 如果在SessionTimeout时间内连接成功,则客户端收到事件None-SynConnected;
3. 如果超出SessionTimeout时间才连接成功,此时ZK集群已经将Session清理,客户端需要重新实例化Zookeeper对象,创建新的session;
4. 如果当前服务器地址连接失败,客户端会选取新的地址进行重试,不断重复子过程直到成功连接到某台机器;

重连机制存在的问题

  1. 无法配置重试策略和重试次数,ZK实现会无限制的重试;
  2. Session失效后无法自动重新创建新Session以及相关的节点、watcher;
  3. 客户端无法知道发生CONNECTION_LOSS时的请求是否执行成功;

相关文章: