开发者社区> 问答> 正文

ZooKeeper的Session机制是什么?

ZooKeeper的Session机制是什么?

展开
收起
令人无语的八阿哥 2021-10-22 15:47:09 513 0
来自:华章出版社
1 条回答
写回答
取消 提交回答
  • ZooKeeper在启动时,客户端会根据配置文件中ZooKeeper服务器列表配置项,选择其中任意一台服务器相连,如果连接失败,它会尝试连接另一台服务器,直到与一台服务器成功建立连接或因为所有ZooKeeper服务器都不可用而失败。

    一旦建立连接,ZooKeeper就会为该客户端创建一个新的session。每个session都会有一个超时时间设置,这个设置由创建session的应用和服务器端设置共同决定。如果ZooKeeper服务器在超时时间段内没有收到任何请求,则相应的session会过期。一旦session过期,任何与该session相关联的临时znode都会被清理。临时znode一旦被清理,注册在其上的watch事件就会被触发。

    需要注意的是,ZooKeeper对于网络连接断开和session过期是两种处理机制。在客户端与服务端之间维持的是一个长连接,在session超时时间内,服务端会不断检测该客户端是否还处于正常连接,服务端会将客户端的每次操作视为一次有效的心跳检测来反复地进行session激活。因此,在正常情况下,客户端session是一直有效的。然而,当客户端与服务端之间的连接断开后,用户在客户端可能主要看到:CONNECTION_LOSS和SESSION_EXPIRED两类异常。

    • CONNECTION_LOSS:网络一旦断连,客户端就会收到CONNECTION_LOSS异常,此时它会自动从ZooKeeper服务器列表中重新选取新的地址,并尝试重新连接,直到最终成功连接上服务器。

    • SESSION_EXPIRED:客户端与服务端断开连接后,如果重连时间耗时太长,超过了session超时时间,服务器会进行session清理。注意,此时客户端不知道session已经失效,状态还是DISCONNECTED,如果客户端重新连上了服务器,此时状态会变更为SESSION_EXPIRED。

    资料来源:《HBase原理与实践》,文章链接:https://developer.aliyun.com/article/724670

    2021-10-22 16:04:45
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
问答排行榜
最热
最新

相关电子书

更多
《MSE 微服务网关》 立即下载
微服务引擎 MSE 治理中心重磅发布 立即下载
阿里云微服务引擎 MSE 2.0 线上发布 立即下载