当zk客户端连接到zk server的时候,会生成一个session伴随这个连接的全部生命周期。这里的客户端泛指一切形式的zk链接,包括不限于zkCli 。在客户端与server保持连接的时候,客户端会定期发送心跳报文向server证明客户端存活,当server在一个时间段(session timeout)内没有收到心跳报文,那么server认为这个客户端已经挂了,之后会删除由这个session建立的全部临时节点,并触发删除节点的watch。可见,session过期由server控制,客户端只配置最大心跳报文接收间隔时长。
设置session有效期
session有效期可以在zoo.cfg中配置通过tickTime配置。tickTime是zk中的时间单位,如最小session超时(minimum session timeout)时间是两倍tickTime。在3.2.0以后,客户端所配置的session有效期必须大于2倍tickTime且小于20倍tickTime
关于expired session监听
直到client重新恢复连接后,才会接收到session expired消息
参考
[1]: Process of Sessions in ZooKeeper [2]: ZooKeeper Programmer's Guide