Flink JobManager高可用性(HA)

Flink JobManager高可用性(HA),第1张

通过Watch机制,这保证了客户端可以监听节点的动态。

客户端可以在ZooKeeper节点(我们叫它znodes)上设置watch,当znode更改时,将触发并删除watch。
当触发watch机制时,客户端会受到一个数据包,说明znode已更改。
如果客户端与其中一个ZooKeeper服务器之间的连接中断,客户端将收到本地通知。
而以上这些都是基于ZooKeeper的服务端与客户端建立的长连接(基于Netty实现)。

zookeeper session也就是会话,用于维持客户端与服务器之间的连接状态。

在ZooKeeper中,客户端和服务端建立连接后会创建一个session(会话),每一个session对应一个全局唯一的会话ID(Session ID)。就像浏览器和Web服务器一样,首次连接Web服务器的时候为了跟踪客户端,Web服务器会创建一个Session。

zookeeper服务器和客户端之间维持的是一个长连接,客户端会定时向服务器发送心跳来维持Session的有效性(每次发送心跳就会刷新session超时时间)。正常情况下Session一直有效,并且ZK集群所有机器上都保存这个Session信息。当出现网络中断或zookeeper服务挂掉时,客户端会主动在地址列表(实例化ZK对象的时候传入构造方法的那个参数connectString)中选择新的地址进行连接(如果没有备选地址,会不断重试之前的那个地址),如果有新的地址可以连接,在中断时长小于sessionTimeout值时,zookeeper客户端自动重连。如果中断时长大于sessionTimeout值时,将出现session expired的异常,这个时候就需要开发者手动做一些处理,比如使用zookeeper的create重建连接。

在创建zookeeper对象时,指定的Watcher是zookeeper客户端默认的Watcher,可以在它的process方法中监听到Session超时事件,具体做法:

重新new 一个zookeeper即可,使用zookeeper提供的API,如下:

但是需要注意session超时之后,之前使用Java API注册的Watcher将丢失,比如:

所以在重建连接之后,你需要重新添加监听。

Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理,后面将会详细介绍 Zookeeper 能够解决的一些典型问题,这里先介绍一下,Zookeeper 的 *** 作接口和简单使用示例。
常用接口列表
客户端要连接 Zookeeper 服务器可以通过创建 orgapachezookeeper ZooKeeper 的一个实例对象,然后调用这个类提供的接口来和服务器交互。
前面说了 ZooKeeper 主要是用来维护和监控一个目录节点树中存储的数据的状态,所有我们能够 *** 作 ZooKeeper 的也和 *** 作目录节点树大体一样,如创建一个目录节点,给某个目录节点设置数据,获取某个目录节点的所有子目录节点,给某个目录节点设置权限和监控这个目录节点的状态变化。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10682969.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-10
下一篇2023-05-10

发表评论

登录后才能评论

评论列表(0条)

    保存