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

devtools/2024/11/14 22:02:01/

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 能够透明地处理分布式系统的复杂性,并实现高可用、高性能的流和批处理作业。


http://www.ppmy.cn/devtools/16506.html

相关文章

网络安全之防范钓鱼邮件

随着互联网的快速发展,新的网络攻击形式“网络钓鱼”呈现逐年上升的趋势,利用网络钓鱼进行欺骗的行为越来越猖獗,对互联网的安全威胁越来越大。网络钓鱼最常见的欺骗方式就是向目标群体发送钓鱼邮件,而邮件标题和内容,…

您有偏离的分支,需要指定如何调和它们。您可以在执行下一次pull 操作之前执行下面一条命令来抑制本消息:

首先理解什么是偏离分支: 当本地的分支落后于远程分支时,本地分支又自行修改项目文件生成了新的提交,这时本地分支再执行git pull命令就不能快进合并,并且还容易发生冲突。这时的本地分支便称为偏离分支,因为这时的本…

【oceanbase】安装ocp,ocp部署oceanbase

https://www.oceanbase.com/docs/common-ocp-1000000000584989 资源 iphostnamecpumem组件192.168.0.71obnode-000-071816oceanbase-ce192.168.0.72obnode-000-072816oceanbase-ce192.168.0.73obnode-000-073816oceanbase-ce192.168.0.74obproxy-000-07424obproxy-ce192.168.0…

Python框架:Django和Flask介绍应用场景和优缺点

Python框架:Django和Flask介绍应用场景和优缺点 Django 和 Flask 都是 Python 语言的 Web 框架,它们用于构建 Web 应用程序。以下是它们的基本介绍、使用方式、优点、缺点以及适用场景的对比。 Django 是什么 Django 是一个高级的 Web 框架&#xff0c…

linux权限维持(四)

6.inetd服务后门 inetd 是一个监听外部网络请求 ( 就是一个 socket) 的系统守护进程,默认情况下为 13 端口。当 inetd 接收到 一个外部请求后,它会根据这个请求到自己的配置文件中去找到实际处理它的程序,然后再把接收到的 这个socket 交给那…

用友政务财务系统 FileDownload 任意文件读取漏洞复现

0x01 产品简介 用友政务财务系统具有多项核心功能,旨在满足各类组织的财务管理需求。首先,它提供了财务核算功能,能够全面管理企业的总账、固定资产、现金、应付应收等模块,实时掌握企业的财务状况,并通过科目管理、凭证处理、报表分析等功能为决策提供有力支持。 0x02 …

C++之map_set的使用

1.关联式容器 2.键值对 3.树形结构的关联式容器 4set 4.1set介绍 4.2set的使用 4.2.1set的参数列表 4.2.2set的构造 4.2.3set的迭代器 4.2.4set的容量操作 4.2.5set的修改操作 4.3multiset 4.3.1multiset 5.map 5.1map的介绍 5.2map的使用 5.2.1map的参数列表 …

CocoaPods使用详解

CocoaPods使用详解 摘要: 本文将全面介绍CocoaPods的使用方法,包括安装、配置、创建和管理项目等方面的内容。通过阅读本文,读者将能够掌握CocoaPods的基本概念和使用技巧,为iOS开发提供便捷的依赖管理解决方案。 关键词&#x…