Apache Flink 中作业图与执行图的深入解析

Apache Flink 是一个用于分布式流处理和批处理的开源框架,它的核心概念之一是使用一系列层次化的执行图来抽象和优化用户的流处理作业。以下是 Flink 中作业图和执行图的详细介绍:

  1. StreamGraph(逻辑流图)

    • StreamGraph 是用户编写的应用程序代码转换成的第一个图表示形式。当用户通过 Flink 的 DataStream 或 DataSet API 编写程序时,Flink 会根据程序中定义的数据源、转换操作(例如 map、filter、join 等)和数据接收器生成一个 StreamGraph。
    • 它反映了程序的原始拓扑结构,包含了所有算子(Operator)及其之间的数据流关系,但并未包含任何关于并行度或其他执行层面的细节。
  2. JobGraph(作业图)

    • JobGraph 是 StreamGraph 经过优化后的版本,是 Flink 客户端提交给 JobManager 的数据结构。
    • 在生成 JobGraph 的过程中,Flink 会对 StreamGraph 进行一系列优化,比如合并连续的同类算子、设置并行度等。
    • JobGraph 包含了具体的并行任务(JobVertex),每个 JobVertex 对应了一个或者多个具有相同逻辑的 Operator,同时连接 JobVertex 的边则代表了数据流通道。
  3. ExecutionGraph(执行图)

    • ExecutionGraph 是 JobManager 根据 JobGraph 创建的实际执行计划,它是 Flink 执行引擎的核心数据结构。
    • ExecutionGraph 更进一步细化了 JobGraph 中的任务,并考虑了容错、调度等因素。每个 JobVertex 在 ExecutionGraph 中对应一个 ExecutionVertex,每个 ExecutionVertex 表示一个具体的并行任务实例,可能分布在不同的 TaskManager 上执行。
    • ExecutionGraph 还记录了任务间的依赖关系、任务的分配情况以及状态恢复信息等,在作业执行期间用于资源分配、故障恢复和进度协调。
  4. PhysicalGraph (物理执行图)

    • 物理执行图是指在实际部署和执行过程中形成的图,也就是由具体 Task(在 TaskManager 上运行的实体)构成的网络。它是由 ExecutionGraph 进一步分解和映射到具体的物理节点(TaskManager)上的表现形式。
    • 每个 Task 由 AbstractInvokable 类的一个实例来执行,它们负责实际的数据处理工作。

总结来说,从用户编写的应用程序代码到最后物理执行的过程中,Flink 通过逐层构建和优化执行图,有效地将复杂的流处理逻辑转换为可在分布式环境中高效执行的任务网络。这一系列图的转换过程确保了 Flink 能够透明地处理分布式系统的复杂性,并实现高可用、高性能的流和批处理作业。

相关推荐
每日品牌解读4 小时前
企业希望灵活切换大模型并降低应用改造成本,推荐使用什么平台?
大数据·网络·人工智能
衡石科技4 小时前
从语义准备到模型验收:HENGSHI SENSE Data Agent 的 RAG 与部署工程实践
java·大数据·人工智能·数据分析·rag
数据中心论坛(公众号同名)4 小时前
补水管道巨响抖动|数据中心水箱振动故障拆解(下篇)
大数据·运维
yichengerp4 小时前
电子元件ERP软件哪个好用?易呈云ERP与主流方案对比解析
大数据·运维·人工智能·云计算·制造
王琦03184 小时前
git使用手册
大数据·git·elasticsearch
大大大大晴天️4 小时前
每天认识一个组件:Apache Kafka
大数据·开源组件
renhongxia14 小时前
中美AI竞争下人工智能赋能大众生活
大数据·人工智能·生活
howdoyoudo2026068 小时前
AI审计手记 #28:从“暂停训练”到“切断联网”——AI安全控制手段的极限升级
大数据·人工智能·安全·ai·语言模型
曦夜日长13 小时前
Git系统篇,Git本地使用(一):从“究极进化版“到三个区域的底层原理
大数据·linux·git·elasticsearch