zookeeper的超时时间由客户端参数和zookeeper server端启动时配置的参数决定的。
1)zk server端timeout参数
tickTime:zk的心跳间隔(heartbeat interval),也是session timeout基本单位。单位为微妙。
minSessionTimeout: 最小超时时间,zk设置的默认值为2*tickTime。
maxSessionTimeout:最大超时时间,zk设置的默认值为20*tickTime。
2)客户端实际超时时间
zookeeper源码:zookeeper-release-3.4.6/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java
** minimum session timeout in milliseconds, -1 if unset */
public int getMinSessionTimeout() { return minSessionTimeout; }
/** maximum session timeout in milliseconds, -1 if unset */
public int getMaxSessionTimeout() { return maxSessionTimeout; }
public int getMinSessionTimeout() {
return minSessionTimeout == -1 ? tickTime * 2 : minSessionTimeout;
}
public int getMaxSessionTimeout() {
return maxSessionTimeout == -1 ? tickTime * 20 : maxSessionTimeout;
}
int sessionTimeout = connReq.getTimeOut();
int minSessionTimeout = getMinSessionTimeout();
if (sessionTimeout < minSessionTimeout) {
sessionTimeout = minSessionTimeout;
}
int maxSessionTimeout = getMaxSessionTimeout();
if (sessionTimeout > maxSessionTimeout) {
sessionTimeout = maxSessionTimeout;
}
cnxn.setSessionTimeout(sessionTimeout);
connReq.getTimeOut()客户端超时时间实际限制在[2*tickeTime, 20*tickTime]范围内。