Apache Flink 任务提交模式

Flink 任务提交模式
  • Flink可以基于多种模式部署:基于Standalone 部署模式,基于Yarn部署模式,基于Kubernetes部署模式
  • 以上不同集群部署模式下提交Flink任务会涉及申请资源,各角色交互过程,不同模式申请资源涉及到的角色大体相同,只是不同Flink集群部署模式支持的任务提交模式不同,对应流程略有不同,有如下三种
    • 会话模式 - Session Mode
    • 单作业模式 - Per-Job Mode(过时)
    • 应用模式 - Application Mode
  • 以上三种任务提交模式主要区别在于Flink集群生命周期不同,资源分配方式不同,以及Flink应用程序的main 方法执行位置(Client客户端/JobManager)不同,
会话模式(Session Mode)
  • Session模式下我们首先会启动一个集群,保持一个会话,这个会话中通过客户端提交作业,集群启动时所有资源都已经确认,所以所有提交任务会竞争集群中的资源。
  • 这种模式适合单个作业规模小,执行时间短的大量作业。

在这里插入图片描述

  • 优势:只需要一个集群,所有作业提交后运行在一个集群,所有任务共享集群资源,每个任务执行完成后就释放资源。
  • 缺点:因为集群资源是共享的,所以资源不够了,提交新的作业就会失败,如果一个作业发生故障导致Taskmanager宕机,那么所有作业都会受到影响。
单作业模式(Per-Job Mode)
  • 为更好隔离资源而生,Per-Job 模式是每提交一个作业启动一个集群,集群只为这个作业而生,这种模式下客户端运行应用程序,然后启动集群,作业被提交给JobManager,然后分发给TaskManager执行,作业执行完之后集群关闭,所有资源释放

在这里插入图片描述

  • 优势:每个作业都有自己的JobManager管理独享当下左右集群资源,就算作业发生故障,对应TaskManager宕机也不影响其他作业,如果一个Application 有多个Job组成,那么每个Job都有自己独立的集群

  • 缺点:每个作业都在客户端享集群JobManager提交,如果一个时间点大量提交Flink作业会造成客户端占有大量网络带宽,会加重客户端所在节点的资源消耗。

  • 注意:Per-Job模式在Flink 1.15中已经弃用,后续版本会剔除,目前只有yarn支持。被Application 模式替代

应用模式(Application Mod)
  • Session 模式 和 Pre-Job模式都是客户端将作业提交给JobManager,这种方式需要占用大量网络带宽下载以来关系,并且将二进制包发送给JobManager。在业务中经常需要提交多个Flink作业并且是在同一个客户端节点提交,这样就更加加剧了客户端所在节点的资源消耗,为了降低客户端这种资源消耗,我们可以使用Application Mode

  • Application 模式与Per-job类似,只是不需要客户端,每个Application提交之后都启动一个JobManager,也就是创建一个集群,这个JobManager只为执行这一个Flink Application而存在,Application中的多个Job都会共用该集群, Application执行结束之后JobManager也就关闭了。这种模式下一个Application会动态创建自己的专属集群(JobManager),所有任务共享该集群,不同Application之间是完全隔离的,在生产环境中建议使用Application模式提交任务。

在这里插入图片描述

  • 以上三种Flink 任务部署方式生产环境优先用Application 模式,三者区别如下:
  1. Session模式现有Flink集群后在提交任务,任务在客户端提交运行,提交的多个作业共享Flink集群
  2. Per-Job 模式和Application模式都是提交Flink任务后创建集群
  3. Per-Job模式通过客户端提交Flink任务,每个Flink任务对应一个Flink集群,每个任务都有很好的资源隔离性
  4. Application模式是在JobManager 上执行main方法,为每一个Flink的Application创建一个Flink集群,如果Application油多个任务,这些Flink任务共享一个集群。

相关推荐

  1. Hadoop提交MR任务

    2024-07-22 02:52:02       22 阅读
  2. python线程池提交任务

    2024-07-22 02:52:02       60 阅读
  3. 模拟防止重复提交

    2024-07-22 02:52:02       19 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 02:52:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 02:52:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 02:52:02       45 阅读
  4. Python语言-面向对象

    2024-07-22 02:52:02       55 阅读

热门阅读

  1. JDK 内置的基本注解类型

    2024-07-22 02:52:02       16 阅读
  2. Xcode代码静态分析:构建无缺陷代码的秘诀

    2024-07-22 02:52:02       18 阅读
  3. 半监督学习 原理与代码实例讲解

    2024-07-22 02:52:02       20 阅读
  4. 初学Mybatis之 CRUD 增删改查

    2024-07-22 02:52:02       13 阅读
  5. TensorFlow 的基本概念和使用场景

    2024-07-22 02:52:02       16 阅读
  6. Windows图形界面(GUI)-DLG-C/C++ - 列表视图(ListView)

    2024-07-22 02:52:02       19 阅读
  7. 大规模语言模型从理论到实践 高效模型微调

    2024-07-22 02:52:02       17 阅读
  8. [11 Qt CMake开发]

    2024-07-22 02:52:02       21 阅读
  9. 显示隐式-》初始化 & 类型转换

    2024-07-22 02:52:02       16 阅读