Apache Flink 运行时架构

  • Flink整个系统由两个主要部分组成JobManager和TaskManager,Flink架构也遵循Master-Slave架构设计原则,JobManager为Master节点,TaskManager为worker(Slave)节点,所有组件之间通讯都是借助Akka Framework,包括任务的状态以及Checkpoint触发等信息。
  • Flink运行时候架构如下:
  • Flink 客户端负责将任务提交到集群,与JobManager之间构建Akka连接,然后将任务提交到JobManager,通过和JobManager之间进行交互获取任务执行状态。
  • Flink 客户端Cliens不是Flink程序运行的一部分,作用是向JobManager准备和发送dataFlow,之后客户端可以断开连接(detached mode)或者保持连接(attached mode)
JobManager
  • JobManager 负责整个集群任务的调度以及资源的管理,从客户端中获取提交的应用,然后根据集群中TaskManager上TaskSlot的使用情况,为提交的应用分配相应的TaskSlots资源并命令TaskManager启动从客户端中获取的应用。
  • JobManager 相当于整个集群的Master节点,Flink HA集群中可以有多个JobManager,但是只能有一个活跃的JobManager。
  • JobManager与TaskManager之间通过Actor System进行通讯,获取任务执行情况并且通过Actor System将应用的任务执行情况发送给客户端
  • CheckPoint机制也是Flink JobManager发出的指令给TaskManager,TaskManger收到CheckPoint指令后完成CheckoutPoint操作
JobManager 中的三个不同组件
Resource Manager
  • 负责Flink集群资源分配,管理,回收。Flink中的资源是TaskManager节点上的Task Slot计算资源,Flink提交的任务最重都会转成Tast,每个Tast 都需要发送到TaskManager上的Slot中执行。
  • 当ResourceManager 管理对应的TaskManager没有足够的slot,会申请启动新的Taskmanager进程
JobMaster
  • JobMaster 负责管理整个任务的生命周期,负责将Dispatcher提交上来的JobGraph转换成ExecutionGraph结构。通过内部调度对ExecutionGraph 执行图进行调度和执行。最终向TaskManager 中提交和运行Task实例,同时会监控各个Task的运行状况,直到整个作业中所有Task都执行完毕。
  • JobMaster和Resource Manager 组件一样,JobManager组件本身也是RPC服务,具备通信能力,可以与ResourceManager进行RPC通信申请任务计算资源,之后将对应Task任务发送到TaskManager执行,FlinkTask执行完后,JobMaster服务关闭。所以JobMaster 与对应的Flink job是一一对应的。
Dispatcher
  • Dispatcher提供了Rest接口,用来提交Flink应用程序执行,例如CLI客户端或者Flink Web UI提交任务最重都会发送到Dispatcher组件,由Dispatcher组件对JobGraph进行风发和执行,并为每个提交作业启动一个新的JobMaster。还运行Flink WebUI 用来提供作业执行信息。
TaskManager
  • Task Manager 负责向整个集群提供Slot计算资源,同时管理JobMaster提交的Task任务。

  • TaskManager会提供JobManager从ResourceManager中申请和分配的Slot计算资源,JobMaster根据分配到的Slot计算资源将Task提交到TaskManager上运行。同时TaskManager还可以缓存数据,TaskManager之间可以进行DataStream数据交换。

  • 一个FLink集群中至少有一个TaskManager,在TaskManager中资源调度的最小单位是task slot,一个TaskManager中task Slot的数量决定了当前Taskmanager最高支持的兵法task个数,一个TaskSlot中可以执行多个算子。

  • 因此Flink的任务是采用多线程,和MapReuce多JVM进程方式有很大区别,Flink这种模式能极大提高CPU的利用率,在多个任务和Task之间通过TaskSlot方式共享系统资源,每个TaskManager中通过管理多个TaskSlot资源池进行有效管理。

相关推荐
@good_good_study14 分钟前
FreeRTOS ARM简明架构
arm开发·架构
维构lbs智能定位16 分钟前
人员定位软件系统从核心架构、关键功能、主流技术、典型应用与选型要点详解
架构
国科安芯31 分钟前
RISC-V架构抗辐照MCU在航天器载荷中的SEU/SEL阈值测试与防护策略
单片机·嵌入式硬件·安全·架构·安全威胁分析·risc-v
郑州光合科技余经理33 分钟前
源码部署同城O2O系统:中台架构开发指南
java·开发语言·后端·架构·系统架构·uni-app·php
阿波罗尼亚33 分钟前
Java框架中的分层架构
java·开发语言·架构
liulanba1 小时前
AI Agent技术完整指南 第四部分:Transformer架构与实践
人工智能·架构·transformer
roman_日积跬步-终至千里1 小时前
【架构-选型逻辑】如何让业务逻辑与开源项目核心逻辑精准对齐——从功能匹配到逻辑对齐的思维转换
架构·开源
Hello.Reader1 小时前
Flink × Hive HiveCatalog 一键接入元数据,Flink 直接读写 Hive 表
大数据·hive·flink
码农三叔1 小时前
(4-1)机械传动系统与关节设计:关节驱动方式对比
人工智能·架构·机器人·人形机器人
Leo July1 小时前
【MySQL】MySQL数据库调优实战指南:从基础优化到架构升级
数据库·mysql·架构