前言
JobManager 用于协调每个Flink任务的调度和资源管理。默认情况下,每个Flink集群只有一个JobManager实例。那么就意味着存在单点故障。如果JobManager崩溃,就不能提交新的任务,且运行中的任务也会失败。
JobManager 高可用可以在JobManager挂掉后,恢复JobManager,从而消除单点故障。
Flink独立部署和部署在Yarn上都可以使用JobManager高可用,生产环境中大多是部署在yarn上的。
基于Yarn的JobManager高可用任然只运行一个JobManager(ApplicationMaster)实例,但是当这个JobManager崩溃后,Yarn会重新启动JobManager。
配置
Flink的高可用需要依赖zookeeper,在配置前先安装zookeeper。除此之外仅需修改两处配置文件:yarn-site.xml和flink-conf.yaml。
1.配置yarn-site.xml,添加如下配置。
<property>
<name>yarn.resourcemanager.am.max-attempts</name>
<value>10</value>
<description>
application master 最大的执行次数.
默认值是2(表示可以容忍JobManager发生一次故障)
</description>
</property>
2.配置flink-conf.yaml
应用尝试启动的次数,10表示可以重启9次(重启9次+初始启动1次),当10次启动都失败时,yarn才会认为这个任务失败。需要注意的是,此处配置的上限是yarn.resourcemanager.am.max-attempts,即最大不能超过上面配置的10.如果需要调高此处参数,则连同yarn.resourcemanager.am.max-attempts也需要调高。
high-availability:zookeeper
high-availability.zookeeper.quorum: hd01:2181,hd02:2181,hd03:2181
high-availability.storageDir: hdfs:///flink/recovery
high-availability.zookeeper.path.root: /flink
yarn.application-attempts: 10
3.启动yarn-session
yarn-session.sh -n 2 -s 2 -jm 1024 -tm 1024 -nm test -d
注意
不同版本的Yarn在任务发生错误后,在关闭Container 时采用不同的方式。
YARN 2.3.0 < version < 2.4.0:当application master失败时,所有的Container都将重启。
YARN 2.4.0 < version < 2.6.0:当application master失败时,TaskManager containers仍会保持存活状态,这样做的好处是启动时间更快,并且不必等待再次获得容器资源。
YARN 2.6.0 <= version:在2.4-2.6的基础上,设置了一个间隔时间,这个间隔时间的值等于Flinks’ Akka timeout value,当任务发生错误后,会以这个时间间隔来重启任务,当重试次数超过Flink设置的yarn.application-attempts值时,任务才会被系统kill。这样可以避免一个长时间失败的任务耗尽application的尝试重启次数。