Flink HA方案介绍
Flink HA方案介绍
每个Flink集群只有单个JobManager,存在单点失败的情况。Flink有Yarn、Standalone和Local三种模式,其中Yarn和Standalone是集群模式,Local是指单机模式。但Flink对于Yarn模式和Standalone模式提供HA机制,使集群能够从失败中恢复。这里主要介绍Yarn模式下的HA方案。
Flink支持HA模式和Job的异常恢复。这两项功能高度依赖ZooKeeper,在使用之前用户需要在“flink-conf.yaml”配置文件中配置ZooKeeper,配置ZooKeeper的参数如下:
high-availability: zookeeper high-availability.zookeeper.quorum: ZooKeeperIP地址:2181 high-availability.storageDir: hdfs:///flink/recovery
Yarn模式
Flink的JobManager与Yarn的Application Master(简称AM)是在同一个进程下。Yarn的ResourceManager对AM有监控,当AM异常时,Yarn会将AM重新启动,启动后,所有JobManager的元数据从HDFS恢复。但恢复期间,旧的业务不能运行,新的业务不能提交。ZooKeeper上还是存有JobManager的元数据,比如运行Job的信息,会提供给新的JobManager使用。对于TaskManager的失败,由JobManager上Akka的DeathWatch机制处理。当TaskManager失败后,重新向Yarn申请容器,创建TaskManager。
Yarn模式的HA方案的更多信息,可参考链接:
http://hadoop.apache.org/docs/r3.1.1/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html
Standalone模式
对于Standalone模式的集群,可以启动多个JobManager,然后通过ZooKeeper选举出Leader作为实际使用的JobManager。该模式下可以配置一个主JobManager(Leader JobManager)和多个备JobManager(Standby JobManager),这能够保证当主JobManager失败后,备的某个JobManager可以承担主的职责。图1为主备JobManager的恢复过程。
TaskManager恢复
对于TaskManager的失败,由JobManager上Akka的DeathWatch机制处理。当TaskManager失败后,由JobManager负责创建一个新TaskManager,并把业务迁移到新的TaskManager上。
JobManager恢复
Flink的JobManager与Yarn的Application Master(简称AM)是在同一个进程下。Yarn的ResourceManager对AM有监控,当AM异常时,Yarn会将AM重新启动,启动后,所有JobManager的元数据从HDFS恢复。但恢复期间,旧的业务不能运行,新的业务不能提交。
Job恢复
Job的恢复必须在Flink的配置文件中配置重启策略。当前包含三种重启策略:fixed-delay、failure-rate和none。只有配置fixed-delay、failure-rate,Job才可以恢复。另外,如果配置了重启策略为none,但Job设置了Checkpoint,默认会将重启策略改为fixed-delay,且重试次数是配置项“restart-strategy.fixed-delay.attempts”的值。
三种策略的具体信息请参考Flink官网:https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/task_failure_recovery.html。配置策略的参考如下:
restart-strategy: fixed-delay restart-strategy.fixed-delay.attempts: 3 restart-strategy.fixed-delay.delay: 10 s
以下场景的异常,都会导致Job重新恢复:
- 当JobManager失败后,所有Job会停止,直到新的JobManager运行后,所有Job恢复。
- 当某一TaskManager失败后,这个TaskManager上的所有作业都将停止,然后等待有可用资源后重启。
- 当某个Job的Task失败后,整个Job也会重启。