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

相关推荐
dreamxian5 分钟前
微服务1 -- MybatisPlus
java·微服务·架构
梦梦代码精8 分钟前
Dify + 扣子 + n8n + BuildingAI:从零搭建写作自动化平台,踩坑与实战全记录
运维·人工智能·架构·gitee·开源·自动化
Mintopia22 分钟前
企业落地 AI-Coding 的“权限与数据红线”简单版:能用到什么程度
人工智能·架构
传感器与混合集成电路25 分钟前
从拉曼散射到相位解调:分布式光纤测井技术解析
分布式·架构
迷藏49437 分钟前
# 发散创新:用Locust实现高并发场景下的精准压力测试实战在现代微服务架构中,**系统稳定性与性能瓶颈的识别能力直接决定了产品上线后
java·python·微服务·架构·压力测试
小陈工1 小时前
2026年3月30日技术资讯洞察:AI算力突破、云原生优化与架构理性回归
开发语言·人工智能·python·云原生·架构·数据挖掘·wasm
未来之窗软件服务1 小时前
东方仙盟VOS诸法空相架构思路—未来之窗行业应用跨平台架构
人工智能·架构·仙盟创梦ide·东方仙盟·昭和仙君
winfredzhang2 小时前
从后端架构到移动端体验:拆解一个优雅的 Node.js 轻量级媒体管理系统
架构·node.js·媒体
AI袋鼠帝2 小时前
阿里上线电商版龙虾!自动开店赚钱、发X,真有点离谱了.
架构
会飞的大可2 小时前
Docker Compose 多服务编排实战:从零搭建微服务架构
docker·微服务·架构