Zookeeper参数——sessionTimeout


发布于 2024-04-05 / 64 阅读 / 0 评论 /
zookeeper连接中,sessionTimeout参数扮演中重要作用

sessionTimeOut表示zookeeper的连接会话的超时时间。由客户端建立连接时设置,但不仅仅由客户端决定,还与服务端配置有关。相关源码如下所示:

int sessionTimeout = connReq.getTimeOut();
byte passwd[] = connReq.getPasswd();
int minSessionTimeout = getMinSessionTimeout();
if (sessionTimeout < minSessionTimeout) {
    sessionTimeout = minSessionTimeout;
}
int maxSessionTimeout = getMaxSessionTimeout();
if (sessionTimeout > maxSessionTimeout) {
    sessionTimeout = maxSessionTimeout;
}
cnxn.setSessionTimeout(sessionTimeout);

根据以上源码可知,sessionTimeout由客户端上报的timeout和服务端自身的sessionTimeout共同决定。

(1)如果上报的timeout小于minSessionTimeout则设置timeout为minSessionTimeout。

(2)如果上报的timeout大于maxSessionTimeout则,设置timeout为maxSessionTimeout。

(3)如果介于两则之间,则以上报的时间为准。

那么现在就有问题了,如果服务端未设置minSessionTimeout和maxSessionTimeout,则如何判定呢?

针对上述问题,源码中也有对应的处理逻辑:

public int getMinSessionTimeout() {
    return minSessionTimeout == -1 ? tickTime * 2 : minSessionTimeout;
}

public int getMaxSessionTimeout() {
    return maxSessionTimeout == -1 ? tickTime * 20 : maxSessionTimeout;
}

从代码中易看出,minSessionTimeout和maxSessionTimeout的缺省值与tickTime参数相关。

代码中tickTime为Zookeeper服务端配置,默认为3000,单位为毫秒。也就是说minSessionTimeout和maxSessionTimeout与tickTime有关。