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资源池进行有效管理。

相关推荐
_ZHOURUI_H_1 小时前
Unity EasyECS:并不是所有字段都适合 SoA,Unity 项目中应该怎样拆数据
游戏·unity·性能优化·架构·游戏引擎
刘立军2 小时前
插件化与扩展点:引导 AI 模块化插拔开发,功能解耦便于迭代
人工智能·后端·架构
YHL2 小时前
向量数据库入门(二):Embedding → 语义搜索 → RAG 日记助手
前端·架构
Rain的Java大神之路2 小时前
SkyWalking从0-1部署成功实战
java·后端·架构
NJCloud2 小时前
Openstack(一)——基础环境配置与依赖服务安装
linux·架构·openstack
围炉聊科技2 小时前
OpenAdapt:录制一次,确定性回放
人工智能·后端·架构
晓晓_za8986682 小时前
多租户 GEO 优化系统源码架构:权限隔离与数据分离实现
java·tcp/ip·spring·缓存·微服务·架构
buligbulig2 小时前
架构企业通往AI的桥梁
人工智能·架构
大锅盖12 小时前
HarmonyOS 6.1.1 AI字幕新特性深度解析:从AICaptionComponent四大新增字段到K歌社交舞台黑霓虹紫深色架构全链路实战
人工智能·架构·harmonyos