flink jobgraph详细介绍
一、Flink JobGraph 的核心概念
JobGraph 是 Flink 作业的核心执行计划,它描述了作业的任务拓扑结构和数据流关系。JobGraph 由以下几部分组成:
-
顶点(Vertex)
- 每个顶点代表一个任务(Task),例如
Source、Sink、Map、Filter、Aggregate等。 - 顶点之间通过边(Edge)连接,表示数据流的方向。
- 每个顶点代表一个任务(Task),例如
-
边(Edge)
- 表示两个顶点之间的数据流关系。
- 边有两种类型:Forward 和 Shuffle。
- Forward:数据直接从前一个任务传递到下一个任务。
- Shuffle:数据需要重新分区(Re-partitioning),例如根据键(Key)进行分区。
-
输入和输出(Input and Output)
- 输入:表示任务的输入数据来源。
- 输出:表示任务的输出数据去向。
-
配置信息(Configuration)
- 包括作业的并行度、资源需求(如内存、CPU 等)、优化策略等。
二、Flink JobGraph 的生成过程
Flink 的作业从用户编写的程序开始,经过一系列的转换步骤,最终生成 JobGraph。以下是详细的生成过程:
-
StreamGraph
- 用户编写的 Flink 程序(如DataStream API 或 DataSet API)会被转换为
StreamGraph,这是一个高层次的逻辑表示。 StreamGraph描述了作业的逻辑结构,但尚未进行优化。
- 用户编写的 Flink 程序(如DataStream API 或 DataSet API)会被转换为
-
Optimized Plan
StreamGraph会被 Flink 的优化器(Optimizer)进行优化,生成一个优化后的执行计划。- 优化器会根据数据流的特点(如分区方式、并行度等)调整任务的拓扑结构,以提高性能。
-
JobGraph
- 优化后的执行计划会被转换为
JobGraph,这是提交给 Flink 运行时的最终形式。 JobGraph包含了任务的拓扑结构、数据流关系以及配置信息。
- 优化后的执行计划会被转换为
三、Flink 架构中的 JobGraph 流转与应用
在 Flink 的整体架构中,JobGraph 的流转和应用贯穿了整个作业的生命周期。以下是 JobGraph 在 Flink 架构中的关键作用:
1. 提交到 JobManager
- 当用户提交一个 Flink 作业时,
JobGraph会被提交到 Flink 集群的JobManager。 JobManager是 Flink 集群的控制中心,负责协调作业的执行。
2. 生成 ExecutionGraph
JobManager会根据JobGraph生成ExecutionGraph。ExecutionGraph是JobGraph的物理实现,它描述了作业在集群中的实际执行方式。ExecutionGraph将JobGraph中的逻辑任务(Vertex)映射到物理节点(TaskManager)上的线程(Task Slot)。
3. 任务调度与执行
JobManager根据ExecutionGraph进行任务调度,将任务分配到不同的TaskManager上。TaskManager负责执行具体的任务(Task),并与JobManager通信以汇报任务的进度和状态。
4. 容错与恢复
JobGraph中包含了作业的容错和恢复策略(如 Checkpoint 和 Savepoint 的配置)。- 如果作业失败或中断,Flink 可以根据
JobGraph和存储的 Checkpoint 数据进行恢复。
四、Flink JobGraph 的应用场景
1. 流处理(Streaming)
- 在流处理场景中,
JobGraph描述了数据流的拓扑结构。 - 例如,一个实时数据处理作业可能包含多个
Source(如 Kafka、File)、中间处理任务(如Map、Filter、Aggregate)和Sink(如 HDFS、数据库)。 JobGraph确保数据流在不同任务之间的高效传输和处理。
2. 批处理(Batch)
- 在批处理场景中,
JobGraph同样适用。 - 批处理作业通常包含数据源(如文件)、数据转换(如
Map、Reduce)和数据 sink(如文件输出)。 JobGraph确保批处理任务的顺序执行和资源分配。
3. 复杂事件处理(CEP)
- 在复杂事件处理场景中,
JobGraph可以描述复杂的事件匹配逻辑。 - 例如,一个 CEP 作业可能包含事件序列匹配、模式识别等任务。
JobGraph确保这些复杂逻辑的高效执行。
五、Flink JobGraph 的优化与容错
1. 优化
- Flink 的优化器会根据
JobGraph进行多种优化,例如:- 并行度调整:根据硬件资源和数据流量调整任务的并行度。
- 分区优化:优化数据分区方式(如 Key-By 分区、Hash 分区)以减少数据在网络中的传输开销。
- 资源分配:根据任务的需求分配 CPU、内存等资源。
2. 容错
- Flink 的容错机制基于
Checkpoint和Savepoint。 JobGraph中包含了 Checkpoint 的配置信息(如 Checkpoint 的间隔时间、存储位置等)。- 如果作业失败,Flink 可以根据最新的 Checkpoint 或 Savepoint 恢复作业,并重新执行失败的任务。
六、总结
Flink JobGraph 是 Flink 作业的核心执行计划,它描述了作业的任务拓扑结构和数据流关系。在 Flink 架构中,JobGraph 从用户程序生成到提交执行的过程中扮演了关键角色。它不仅决定了作业的执行方式,还影响了作业的性能和可靠性。通过深入理解 JobGraph 的生成过程和应用方式,用户可以更好地优化 Flink 作业,提高其性能和稳定性。
相关文章:
flink jobgraph详细介绍
一、Flink JobGraph 的核心概念 JobGraph 是 Flink 作业的核心执行计划,它描述了作业的任务拓扑结构和数据流关系。JobGraph 由以下几部分组成: 顶点(Vertex) 每个顶点代表一个任务(Task),例如…...
使用nginx+rtmp+ffmpeg实现桌面直播
使用nginxrtmpffmpeg实现桌面直播 流媒体服务器搭建 docker run docker镜像基于添加了rtmp模块的nginx,和ffmpeg docker pull alfg/nginx-rtmp docker run -d -p 1935:1935 -p 8080:80 --namenginx-rtmp alfg/nginx-rtmprtmp模块说明 进入容器内部查看 docker…...
每日一题——将数字字符串转化为IP地址
将数字字符串转化为IP地址 题目描述解题思路回溯法步骤分解 代码实现全局变量有效性验证函数回溯函数主函数完整代码 复杂度分析关键点说明总结 这题难度还挺大的,整体上实现并不容易。建议参考视频 和https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%…...
机器学习数学基础:25.随机变量分布详解
一、随机变量与分布函数的基本概念 (一)什么是随机变量? 在概率论领域,随机变量是将随机试验的结果进行数值化的关键概念。它就像一座桥梁,把抽象的随机事件和具体的数学分析连接起来。 举例来说,在一个…...
香港电讯与Zenlayer达成战略合作,拓展全球互联生态圈
作为主要国际金融与贸易中心,香港一直是连系中国内地及全球市场的重要门户。香港电讯作为本地领先的综合电讯服务提供商,拥有广泛的网络资源和深厚的技术专长,一直支持国内企业“走出去”和外资企业“走进来”。而旗下由PCCW Global营运的Con…...
MySQL-事务隔离级别
事务有四大特性(ACID):原子性,一致性,隔离性和持久性。隔离性一般在事务并发的时候需要保证事务的隔离性,事务并发会出现很多问题,包括脏写,脏读,不可重复读,…...
【Python学习 / 6】面向对象编程(OOP)
文章目录 ⭐前言⭐一、类和对象:面向对象编程基础1. 类(Class)类的组成:例子:定义一个简单的 Dog 类代码解析: 2. 对象(Object)对象的创建: 3. 三大特性:封装…...
Ollama DeepSeek + AnythingLLM 实现本地私有AI知识库
Ollama DeepSeek AnythingLLM 实现本地私有AI知识库 本地部署DeepSeek-r1下载安装AnythingLLMAnythingLLM 配置LLM首选项Embedder首选项向量数据库工作区其他配置 AnythingLLM Workspace使用上传知识词嵌入知识检索 本文主要介绍了如何使用AnythingLLM结合Ollama部署的DeepSee…...
个人博客测试报告
一、项目背景 个人博客系统采用前后端分离的方法来实现,同时使用了数据库来存储相关的数据,同时将其部署到云服务器上。前端主要有四个页面构成:登录页、列表页、详情页以及编辑页,以上模拟实现了最简单的个人博客系统。其结合后…...
嵌入式八股文(四)计算机网络篇
第一章 基础概念 1. 服务 指网络中各层为紧邻的上层提供的功能调用,是垂直的。包括面向连接服务、无连接服务、可靠服务、不可靠服务。 2. 协议 是计算机⽹络相互通信的对等层实体之间交换信息时必须遵守的规则或约定的集合。⽹络协议的三个基本要素:语法、…...
基于Electron+Vue3创建桌面应用
Electron 是一个开源框架,基于 Chromium 和 Node.js,用于开发跨平台桌面应用程序。它允许开发者使用 HTML、CSS 和 JavaScript 等 Web 技术构建原生桌面应用,支持 Windows、macOS 和 Linux。Electron 以其开发便捷性、强大的功能和丰富的生态系统而广泛应用于工具类应用、媒…...
建立稳定分析模式的模式语言01
Haitham Hamza 等 著,wnb 译 摘要 一般认为,软件分析模式在减少开销和缩短软件产品生命周期等方面会起到重要的作用。然而,分析模式的巨大潜能还未被充分发掘。缺乏稳定性是当前分析模式存在的主要问题。多数情况下,为特定问题建…...
【C++游戏开发-五子棋】
使用C开发五子棋游戏的详细实现方案,涵盖核心逻辑、界面设计和AI对战功能: 1. 项目结构 FiveChess/ ├── include/ │ ├── Board.h // 棋盘类 │ ├── Player.h // 玩家类 │ ├── AI.h // AI类 │ └── Game.h // 游戏主逻辑 ├── src/ …...
ubuntu20动态修改ip,springboot中yaml的内容的读取,修改,写入
文章目录 前言引入包yaml原始内容操作目标具体代码执行查看结果总结: 前言 之前有个需求,动态修改ubuntu20的ip,看了下: 本质上是修改01-netcfg.yaml文件,然后执行netplan apply就可以了。 所以,需求就变成了 如何对ya…...
tailwindcss学习02
vue中接入tailwindcss 使用cmd不要使用powershell npm create vitelatest stu02 -- --template vue cd stu02npm install --registry http://registry.npm.taobao.org npm install -D tailwindcss3.4.17 postcss autoprefixer --registry http://registry.npm.taobao.org npx t…...
千峰React:脚手架准备+JSX基础
组件化->封装性 React提供函数组件实现组件化 React和传统JS的区别就是JS需要手动管理DOM操作,React: 采用组件化开发,通过虚拟DOM提升性能。 MVC 是一种软件设计模式,全称为 Model-View-Controller(模型-视图-控制器&#x…...
【算法】快排
题目 快排 思路 如果输入为0或1直接返回;否则取一个基准值,可以取中间位置,如果输入是有序的可以避免时间过长,然后移动指针,先让i指针右移,如果小于基准值就继续右移,j指针左移同理。如果指…...
开放签电子签章工具版 2.0 正式发布,构建全场景电子签约能力、满足复杂的签章管理场景
根据近半年开源用户和市场需求反馈,开放签团队推出电子签章工具版2.0版本,主要解决复杂的签约流程集成和电子印章授权管理场景。以API接口对外提供服务和配置一套可视化后台管理系统,可与业务系统无缝集成,用户使用起来毫无“违和…...
python和pycharm 和Anaconda的关系
好的,下面我会详细说明 Python、PyCharm 和 Anaconda 三者的关系,并逐一解释它们的功能和作用。 1. Python(编程语言) 定义:Python 是一种高级编程语言,设计简洁,易于学习,且功能强…...
DeepSeek V3和R1
DeepSeek V3 和 R1 是深度求索(DeepSeek)推出的两款大模型,基于混合专家架构(MoE),但在设计目标、训练方法和应用场景上存在显著差异。以下是两者的详细对比与补充内容: DeepSeek V3和R1 一、模…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
