Zookeeper 会话(Session)是什么?
-
Session 可以看作是 ZooKeeper 服务器与客户端的之间的一个 TCP 长连接,通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能够向 ZooKeeper 服务器发送请求并接受响应,同时还能够通过该连接接收来自服务器的 Watcher 事件通知。
Session 有一个属性叫做:
sessionTimeout
,sessionTimeout
代表会话的超时时间。当由于服务器压力太大、网络故障或是客户端主动断开连接等各种原因导致客户端连接断开时,只要在sessionTimeout
规定的时间内能够重新连接上集群中任意一台服务器,那么之前创建的会话仍然有效。另外,在为客户端创建会话之前,服务端首先会为每个客户端都分配一个
sessionID
。由于sessionID
是 ZooKeeper 会话的一个重要标识,许多与会话相关的运行机制都是基于这个sessionID
的,因此,无论是哪台服务器为客户端分配的sessionID
,都务必保证全局唯一。