ZooKeeper:Connection Loss/Session Expired

ZooKeeper客户端在连接丢失或会话超时时,会触发CONNECTIONLOSS或SESSIONEXPIRED异常。连接断开时,客户端会尝试重新连接并保持原有会话;而会话超时时,服务器认为会话结束,清除相关数据和Watcher,客户端需关闭旧会话并新建ZooKeeper实例。
摘要由CSDN通过智能技术生成

会话

  ZooKeeper客户端和服务端建立Socket长连接之后,服务器端创建一个session,生成一个全局唯一的会话ID(Session ID)。在SESSION_TIMEOUT时间内,服务器会确定客户端是否正常连接(客户端会定时向服务器发送心跳信息,服务器重置下次SESSION_TIMEOUT时间)。因此,在正常情况下,session一直有效,并且ZooKeeper集群所有机器上都保存这个session信息。客户端什么时候向服务器发送心跳消息?
  在创建Session时,需要设置Session Timeout参数,该参数是Zookeeper服务允许一个session在定义它失效之前的时间。如果服务在时间t内不能看到与一个session关联的消息,它将定义这个session失效。如果客户端在1/3 t时间内没有听到任何从服务器过来的消息,它将发送一个心跳消息给服务器。在(2/3)t时间, Zookeeper客户端开始寻找另一个Zookeeper服务器,并且它有另外的(1/3)t的时间寻找。
  因为网络原因或者服务器原因,Socket 断开,客户端尝试重新连接,等到重新连接上,发现之前的session已经不在了,服务器会告诉客户端会话超时,客户端会关闭session,然后开启新的session.。

客户端将连接哪一个服务器?
  在Quorum模式,一个客户端拥有多个服务器可以连接。然而在Standalone模式,它必须尝试有效地连接到那个唯一的服务器。在Quorum模式,会传一个服务器列表到客户端,客户端从中选择一个连接。
  当尝试连接另一个服务器时,很重要的一点是这个服务器的ZooKeeper状态至少要和客户端已经观察到的最近ZooKeeper状态是一样新的。Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值