Flink高可用设置
Flink从逻辑上保证高可用的方式是通过检查点机制,但从物理架构上,则也需要保证高可用性.
比如其中的JobManager组件的故障.
JobManager存放了对应的应用及相关的元数据,比如检查点路径信息,这些都需要进行高可用保证.
Flink的HA模式需要依赖ZooKeeper和某种远程存储.一旦出现了故障,新的JobManager从ZK中查找相关路径,并在远程存储中查找并加载元数据.
简单开启Flink HA模式的配置如下.都在./conf/flink-conf.yaml中配置
开启HA
high-availability:zookeeper
ZK的服务器列表
high-availability.zookeeper.quorum:xxxxx,xxxx
设置ZK的前缀
high-availability.zookeeper.path.root: ./flink
那么不同部署模式下的HA如何实现呢?
1. 集群部署
集群部署由于没有和外部服务集成,那么需要自己准备后备的组件来进行接管.
对于TaskManager进程会在自己的主ResourceManager中注册,当出现故障的时候,会自动将任务转移给其他的ResourceMananger.
对于Dispatcher,只会存在一个领导者,其他都是跟随者,只是负责在故障出现时进行顶替
而对于启动的JobManager,则是将路径写入ZK,利用远程存储进行高可用保存.
集群模式下的HA,需要维持一些配置,比如每个集群设置自己的名称,避免在同一个ZK中注册,导致无法区分
high-availability.cluster-id: xxxxx,xxxx
2. YARN的HA设置
YARN带有资源的高可用管理器
所以无需设置后背进程,而Flink在YARN中,是以ApplicationMaster存在的,YARN会自动重启故障的ApplicationMaster,但是往往有一个重启的最大限制,这个最大限制可以在YARN的配置文件中配置.
3. Kubernetes的HA设置
Kubernetes上由于Flink的部署方式本身就具有高可用性,那么想要使用HA的话.需要配置的参数并不多,只需要在配置文件中配置ZK的主机名,持久化存储路径以及Flink集群ID,所有都需要作为参数添加到Flink的配置文件中
不过由于Flink本身不支持设置环境变量参数,所需要进行硬编码