zoukankan      html  css  js  c++  java
  • Flink on yarn HA 配置

    先看下官网对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(开发技术)相关的推文

  • 相关阅读:
    Java操作redis
    Ajax & Json
    【转载】K8s-Pod时区与宿主时区时区同步
    【转载】Python中如何将字符串作为变量名
    【转载】python实现dubbo接口的调用
    机器学习避坑指南:训练集/测试集分布一致性检查
    机器学习深度研究:特征选择中几个重要的统计学概念
    机器学习数学基础:学习线性代数,千万不要误入歧途!推荐一个正确学习路线
    被 Pandas read_csv 坑了
    print('Hello World!')的新玩法
  • 原文地址:https://www.cnblogs.com/Springmoon-venn/p/12551729.html
Copyright © 2011-2022 走看看