先看下官网对Flink 各个组件的描述:https://ci.apache.org/projects/flink/flink-docs-release-1.10/concepts/runtime.html#job-managers-task-managers-clients

 

 启动流程。

Flink 的 checkpoint 可以保证任务在遇到异常的时候,可以自动从上一个checkpoint 的状态恢复,保障任务的正常的运行,这应该是大家都知道的事情。

上面的异常,指的是执行计算任务的 taskmanager 的异常,如果是jobmanager 遇到异常是不能自动恢复的。(因为需要恢复的元数据、执行图、各种端口、路径都是jobmanager 管理的,jobmanager 死了,就都没有了)

下面内容来自官网:https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/jobmanager_high_availability.html

JobManager协调每个Flink部署。它既负责调度负责资源管理

默认情况下,每个Flink集群只有一个JobManager实例。这将创建一个单点故障(SPOF):如果JobManager崩溃,则无法提交任何新程序,并且正在运行的程序也会失败。

使用JobManager高可用性,您可以从JobManager故障中恢复,从而消除SPOF您可以为独立群集YARN群集配置高可用性

在运行高可用的YARN群集时,我们不会运行多个JobManager(ApplicationMaster)实例,而只能运行一个实例,当实例出现故障时,YARN会重新启动该实例。 确切的行为取决于您使用的特定YARN版本。

配置 yarn-site.xml 

<property>
  <name>yarn.resourcemanager.am.max-attempts</name>
  <value>4</value>
  <description>
    The maximum number of application master execution attempts.
  </description>
</property>

注:重试次数最大为 4次,默认为 2(允许单个jobmanager的故障)

不同的hadoop版本上,yarn container 有不同的异常恢复行为:

  •      YARN 2.3.0 < version < 2.4.0:所以container重启
  •      YARN 2.4.0 < version < 2.6.0mastercontainer挂了,taskmanagercontainer可以继续执行;恢复更快
  •      YARN 2.6.0 <= version:根据Flink配置,只有任务在一定时间内连续尝试了一定次数才会被kill

flink-conf.yaml 配置:

high-availability: zookeeper
high-availability.zookeeper.quorum: localhost:2181
high-availability.storageDir: hdfs:///flink/recovery
high-availability.zookeeper.path.root: /flink
yarn.application-attempts: 10

具体配置就这样的,官网都有描述。

关于测试,我起了下面这么一个简单的任务:读kafka,写kafka

 

 测试内容是:在有无 checkpoint、有无 HA 的情况下 kill  taskmanager 和 jobmanager

测试用例和测试结果如下:

1、无checkpoint 
    kill taskmanager : 直接挂掉

2、有checkpoint
    1、先不配置HA
        kill taskmanager : 
            1 次:回退上一次checkpoint, taskmanager 迁移,jobmanager 不迁移  (可配置精确一次)
            2 次:回退上一次checkpoint, taskmanager 迁移,jobmanager 不迁移 
            3 次:

        kill jobmanager : 
            1 次: 直接挂掉

    2、配置HA
        kill taskmanager : 
            1 次:回退上一次checkpoint, taskmanager 迁移,jobmanager 不迁移 
            2 次:回退上一次checkpoint, taskmanager 迁移,jobmanager 不迁移 
        kill jobmanager : 
            1 次:taskmanager 正常写数据,webui 短时不能访问,jobmanager 恢复后,会迁移,tm 会从checkpoint 恢复一次
            2 次:taskmanager 正常写数据,webui 短时不能访问,jobmanager 恢复后,会迁移,tm 会从checkpoint 恢复一次
            3 次:同上


taskmanager kill 次数: 10 任务运行正常
jobmanager  kill 次数: 10 任务运行正常 # yarn 和 flink 的重试次数都是短时间内的尝试,如果任务已经正常运行一段时间就重新计数了

重启yarn 页面:

Flink 1.10 启动比较快,看不到这个页面了:

 

 

搞定

关于checkpoint 重启,精确一次的测试,可以参考下一篇  Flink kafka connector 端到端精确一次测试  (还没写,写了回来更新)

 

欢迎关注Flink菜鸟公众号,会不定期更新Flink(开发技术)相关的推文

posted on 2020-03-23 18:32  Flink菜鸟  阅读(1751)  评论(0编辑  收藏  举报