当前位置: 首页 > article >正文

Apache Flink技术原理深入解析:任务执行流程全景图

前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见大数据技术体系


思维导图

在这里插入图片描述

📌 引言

Apache Flink 作为一款高性能的分布式流处理引擎,其内部执行机制精妙而复杂。本文将深入剖析 Flink 从任务提交到执行的完整流程,揭示其背后的架构设计与技术原理。通过理解这一执行链路,开发者能够更有效地优化应用程序、排查问题,并充分发挥 Flink 的性能优势。

🔍 Flink 执行流程概述

Flink 的任务执行流程可概括为四个核心阶段:Client提交任务→JobGraph生成→调度与Slot分配→Task执行。这四个阶段共同构成了一个完整的任务生命周期。

在这里插入图片描述

Flink 执行图转换经过四层变换,层层优化,实现从逻辑到物理的高效映射:

在这里插入图片描述

🚀 1. 客户端提交任务

1.1 任务提交入口

当用户调用 env.execute() 方法时,整个 Flink 作业的执行流程正式启动。根据配置的运行模式不同(本地模式或远程集群模式),Flink 会创建相应的执行环境。

// 典型的Flink程序入口
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 定义数据处理逻辑
DataStream<String> stream = env.fromSource(...).map(...).keyBy(...).window(...).reduce(...);
// 触发执行
env.execute("Job Name");

execute() 方法是整个任务提交流程的起点,它会触发以下过程:

  1. 获取执行环境(StreamExecutionEnvironmentExecutionEnvironment
  2. 生成初始执行图(StreamGraph
  3. 将执行图转换为优化后的作业图(JobGraph
  4. 将作业提交到执行环境

在这里插入图片描述

1.2 执行环境的类型与选择

Flink 提供了多种执行环境,根据不同的运行场景选择:

  • LocalStreamEnvironment:在本地 JVM 中执行,用于测试和开发
  • RemoteStreamEnvironment:连接到远程 Flink 集群执行
  • StreamContextEnvironment:CLI 提交时使用
  • StreamPlanEnvironment:用于生成执行计划但不实际执行作业

执行环境的选择直接影响后续的作业提交方式和资源分配策略。

1.3 StreamGraph 的生成机制

当用户通过 Flink API(如 map()filter()keyBy() 等)定义数据转换时,这些操作并不会立即执行,而是被注册为 Transformation 对象,形成一个转换链。

在这里插入图片描述

StreamGraph 是对用户代码逻辑的直接映射,它通过 StreamGraphGenerator 类生成:

  1. 遍历所有注册的 Transformation
  2. 为每个 Transformation 创建相应的 StreamNode
  3. 根据上下游依赖关系,创建 StreamEdge 连接各个节点
  4. 设置节点的并行度、缓冲区参数等属性
// StreamGraph生成的核心代码(简化版)
public class StreamGraphGenerator {public StreamGraph generate() {// 遍历所有Transformation并创建对应的StreamNodefor (Transformation<?> transformation : transformations) {transform(transformation);}return streamGraph;}private <T> Collection<Integer> transform(Transformation<T> transform) {// 根据转换类型创建不同的节点if (transform instanceof OneInputTransformation) {return transformOneInputTransform((OneInputTransformation<?, T>) transform);} else if (...) {// 处理其他类型的转换}}
}

生成的 StreamGraph 包含以下关键信息:

  • 操作符(Operator)的类型和属性
  • 数据流的来源和去向
  • 并行度配置
  • 操作符状态描述
  • 时间特性配置(事件时间/处理时间)
  • 水位线(Watermark)策略

1.4 JobGraph 生成与优化

StreamGraph 生成后,接下来会被转换为 JobGraph,这是一个经过初步优化的执行计划。JobGraph 的核心优化包括算子链(Operator Chaining)的形成,这是 Flink 性能优化的关键技术。

在这里插入图片描述

在 JobGraph 阶段,Flink 会分析哪些操作可以链接在一起执行,从而减少数据传输和线程切换的开销。

算子链条件:
  1. 相同的并行度:链接的算子必须有相同的并行度设置
  2. 上下游单向 Forward 边:数据传输模式必须是 FORWARD(一对一)
  3. 同一个 Slot Group:所有算子必须在同一个槽位组内
  4. 下游算子的入度为 1:下游算子只能有一个输入源
  5. 上游算子的出度为 1:上游算子只能有一个输出目标
  6. 算子链接标志未禁用:开发者没有手动禁止链接
// 禁用特定算子的链接示例
DataStream<String> stream = env.fromSource(...).map(...).disableChaining()  // 禁用此map操作的链接.filter(...).keyBy(...);

1.5 提交到集群

JobGraph 生成后,Flink 会将其提交到集群执行。提交方式取决于执行环境类型:

本地模式:
  1. 启动 MiniCluster(一个轻量级的 Flink 集群)
  2. 直接将 JobGraph 提交到本地 JobManager
  3. 等待执行完成或异常
远程模式:
  1. 创建 ClusterClient(通常是 RestClusterClient)
  2. 将 JobGraph 序列化并通过 REST API 提交给 Dispatcher
  3. 上传依赖的 JAR 包和相关资源
  4. 获取 JobID 并可选择等待执行结果

在这里插入图片描述

客户端提交还包含以下关键步骤:

  • 依赖解析:确定作业所需的所有依赖 JAR 包
  • 类加载隔离:设置适当的类加载器层次结构
  • 配置传递:将作业相关的配置参数传递给集群
  • 资源需求计算:估算作业所需的资源(内存、CPU 等)

🔄 2. JobGraph 生成流程

2.1 StreamGraph 到 JobGraph 的转换

StreamGraph 到 JobGraph 的转换是在客户端完成的,这个过程由 StreamingJobGraphGenerator 类负责。转换步骤如下:

  1. 确定算子链:根据链接条件,确定哪些操作可以链接到一起
  2. 创建 JobVertex:为每个算子链创建一个 JobVertex
  3. 设置边缘属性:根据数据传输模式设置边缘属性(如分区策略)
  4. 配置检查点:设置检查点相关的配置
  5. 优化资源分配:配置 Slot 共享组和协同定位约束
// JobGraph生成的简化代码
public JobGraph createJobGraph() {// 创建空的JobGraphJobGraph jobGraph = new JobGraph(jobName);// 构建算子链Map<Integer, OperatorChain> chainedOperators = buildOperatorChains();// 为每个链创建JobVertexfor (OperatorChain chain : chainedOperators.values()) 

相关文章:

Apache Flink技术原理深入解析:任务执行流程全景图

前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 思维导图 📌 引言 Apache Flink 作为一款高性能的分布式流处理引擎,其内部执行机制精妙而复杂。本文将…...

DeepBI:重构流量逻辑,助力亚马逊广告实现高效流量增长

在日益激烈的跨境电商竞争环境中&#xff0c;广告投放早已从“粗放撒网”走向“精细化运营”。尤其是在亚马逊这样一个成熟且竞争白热化的平台&#xff0c;如何在广告预算有限的前提下实现高效曝光、精准触达、稳定转化&#xff0c;成为众多卖家和运营团队面临的核心挑战。 De…...

RAG(Retrieval-Augmented Generation)基建之PDF解析的“魔法”与“陷阱”

嘿&#xff0c;亲爱的算法工程师们&#xff01;今天咱们聊一聊PDF解析的那些事儿&#xff0c;简直就像是在玩一场“信息捉迷藏”游戏&#xff01;PDF文档就像是个调皮的小精灵&#xff0c;表面上看起来规规矩矩&#xff0c;但当你想要从它那里提取信息时&#xff0c;它就开始跟…...

C语言【文件操作】详解中(会使用fgetc,fputc,fgets,fputs,fscanf,fprintf,fread,fwrite函数)

引言 介绍和文件操作中文件的顺序读写相关的函数 看这篇博文前&#xff0c;希望您先仔细看一下这篇博文&#xff0c;理解一下文件指针和流的概念&#xff1a;C语言【文件操作】详解上-CSDN博客文章浏览阅读606次&#xff0c;点赞26次&#xff0c;收藏4次。先整体认识一下文件是…...

【Python Cookbook】字符串和文本(一)

字符串和文本&#xff08;一&#xff09; 1.使用多个界定符分割字符串2.字符串开头或结尾匹配3.用 Shell 通配符匹配字符串4.字符串匹配和搜索5.字符串搜索和替换 1.使用多个界定符分割字符串 你需要将一个字符串分割为多个字段&#xff0c;但是分隔符&#xff08;还有周围的空…...

GpuGeek:破解算力难题,赋能AI创新与普及

文章目录 一、引言二、填补算力资源供需缺口&#xff0c;降低使用门槛三、提升算力资源利用率&#xff0c;推动高效协作四、满足多样化需求&#xff0c;支持AI技术落地五、推动算力市场创新&#xff0c;促进生态良性发展六、助力AI人才培养&#xff0c;推动行业长远发展七、结语…...

扣子平台知识库不能上传成功

扣子平台知识库不能上传成功 目录 扣子平台知识库不能上传成功查看模板复制头部到自己的excel中json数据转为excel或者csv&#xff08;一定使用excel&#xff0c;csv总是报错&#xff09; 查看模板复制头部到自己的excel中 json数据转为excel或者csv&#xff08;一定使用excel&…...

蓝桥杯 R格式

问题描述 小蓝最近在研究一种浮点数的表示方法&#xff1a;R 格式。 对于一个大于 0 的浮点数 d&#xff0c;可以用 R 格式的整数来表示。 给定一个转换参数 n&#xff0c;将浮点数转换为 R 格式整数的做法是&#xff1a; 将浮点数乘以 2^n&#xff1b;将结果四舍五入到最接…...

计算机视觉的多模态模型

计算机视觉的多模态模型 是指能够同时处理和理解 多种类型数据&#xff08;模态&#xff09; 的模型。这些模态可以包括图像、文本、音频、视频、深度信息等。多模态模型的核心目标是利用不同模态之间的互补信息&#xff0c;提升模型的性能和泛化能力。 1. 多模态模型的核心思想…...

JVM的组成--运行时数据区

JVM的组成 1、类加载器&#xff08;ClassLoader&#xff09; 类加载器负责将字节码文件从文件系统中加载到JVM中&#xff0c;分为&#xff1a;加载、链接&#xff08;验证、准备、解析&#xff09;、和初始化三个阶段 2、运行时数据区 运行时数据区包括&#xff1a;程序计数…...

c++进阶之------红黑树

一、概念 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡二叉查找树&#xff0c;它在计算机科学的许多领域中都有广泛应用&#xff0c;比如Java中的TreeMap和C中的set/map等数据结构的底层实现。红黑树通过在每个节点上增加一个颜色属性&#xff08;红色或黑色&am…...

《鸿蒙原生应用开发:掌控Ability生命周期的艺术》

在鸿蒙原生应用开发的广袤天地中&#xff0c;Ability作为构建应用的基本单元&#xff0c;其生命周期的有效管理宛如基石之于高楼&#xff0c;是打造稳定、高效且用户体验卓越应用的关键所在。随着鸿蒙生态的蓬勃发展&#xff0c;深入理解并巧妙运用Ability生命周期&#xff0c;…...

ubuntu22.04安装搜狗输入法保姆教程~

一、添加中文语言支持 1.首先打开设置,找到Language and Region 2.点击Manage Installed Languages 3.点击 Install/Remove Languages... 4.选中Chinese (simplified),点击Apply...

《数据库原理》SQLServer期末复习_题型+考点

目录 题型&#xff1a; 一. 概况分析题&#xff08;5小题&#xff0c;每小题2分&#xff0c;共10分&#xff09; 二. 计算题&#xff08;3小题&#xff0c;每小题5分&#xff0c;共15分&#xff09; 三. 数据库设计&#xff08;2小题&#xff0c;每小题10分&#xff0c;共2…...

Zstd(Zstandard)压缩算法

要压缩的数据量越小&#xff0c;压缩的难度就越大。这个问题对所有压缩算法都是通用的&#xff0c;原因是压缩算法从过去的数据中学习如何压缩未来的数据。但是&#xff0c;在新数据集开始时&#xff0c;没有“过去”可以构建。 官网 为了解决这种情况&#xff0c;Zstd 提供了一…...

烧结银技术赋能新能源汽车超级快充与高效驱动

烧结银技术赋能新能源汽车超级快充与高效驱动 在新能源汽车领域&#xff0c;高压快充技术的突破与高功率密度驱动系统的创新正成为行业竞争的焦点。比亚迪于 2025 年发布的超级 e 平台&#xff0c;通过整合全域千伏高压架构、兆瓦级闪充技术及碳化硅&#xff08;SiC&#xff0…...

本地部署 browser-use

本地部署 browser-use 0. 引言1. 核心功能与优势2. 快速上手3. 部署 Gradio UI4. 更多示例0. 引言 Browser-Use 是一个强大的工具,旨在让 AI Agent 能够控制浏览器,从而实现各种自动化任务。它简化了 AI 与浏览器的交互,让开发者能够轻松构建能够执行网页操作的智能应用。本…...

笔记:代码随想录算法训练营day59:110.字符串接龙 、105.有向图的完全可达性、106.岛屿的周长

学习资料&#xff1a;代码随想录 110. 字符串接龙 卡码网题目链接&#xff08;ACM模式&#xff09; 还是有些许复杂&#xff0c;要把字符串从begin开始遍历&#xff0c;然后把每一个字母都换一下&#xff0c;看能否在字典里找到&#xff0c;如果能找到就入队列并记录&#x…...

电力和冷却管理:如何让数据中心“高效降温”同时节能增效

电力和冷却管理:如何让数据中心“高效降温”同时节能增效 数据中心作为现代信息技术基础设施的核心,承担着处理、存储和传输海量数据的重任。然而,这些庞大的服务器和存储设备在高速运转时,不仅需要大量电力供应,还产生了大量热量。如何平衡电力消耗与有效冷却,成为了数…...

Vite管理的Vue3项目中monaco editer的使用以及组件封装

文章目录 背景环境说明安装流程以及组件封装引入依赖封装组件 外部使用实现效果 v-model实现原理 背景 做oj系统的时候,需要使用代码编辑器,决定使用Monaco Editor&#xff0c;但是因为自身能力问题&#xff0c;读不懂官网文档&#xff0c;最终结合ai和网友的帖子成功引入&…...

查找重复代码[A卷-hw_od]

题目描述 小明负责维护项目下的代码&#xff0c;需要查找出重复代码&#xff0c;用以支撑后续的代码优化&#xff0c;请你帮助小明找出重复的代码。 重复代码查找方法&#xff1a;以字符串形式给定两行代码&#xff08;字符串长度 1 < length < 100&#xff0c;由英文字…...

HAl库开发中断方式接收Can报文的详细流程

下面给出一个基于 HAL 库的中断方式接收 CAN 报文的详细流程说明&#xff0c;描述每一步的硬件配置、软件调用和中断处理机制&#xff0c;而不涉及具体代码细节&#xff0c;只讲解整体原理和步骤&#xff1a; 在使用 HAL 库时&#xff0c;不需要手动清除中断标志位。原因如下&…...

[笔记] TinyWebServer编译及demo运行过程

文章目录 前言环境搭建ubuntumysql 8.0c/c开启root用户TinyWebServer 搭建及编译过程运行结果常见问题./threadpool/../CGImysql/sql_connection_pool.h:6:10: fatal error: mysql/mysql.h: No such file or directory./server运行后直接退出了 前言 哎 也就帮帮新手看看问题 …...

基于springboot的电影院管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 互联网技术的成熟和普及&#xff0c;势必会给人们的生活方式带来不同程度的改变。越来越多的经营模式中都少不了线上运营&#xff0c;互联网正强力推动着社会和经济发展。国人对民族文化的自信和不同文化的包容&#xff0c;再加上电影行业的发展&#xff0c;如此繁荣吸引…...

基于Redis分布锁+事务补偿解决数据不一致性问题

基于Redis的分布式设备库存服务设计与实现 概述 本文介绍一个基于Redis实现的分布式设备库存服务方案&#xff0c;通过分布式锁、重试机制和事务补偿等关键技术&#xff0c;保证在并发场景下库存操作的原子性和一致性。该方案适用于物联网设备管理、分布式资源调度等场景。 …...

虚拟电商-延迟任务系统的微服务改造(二)注册中心和Feign调用

一、微服务注册中心Consul 编写完延迟任务系统的web层接口&#xff0c;也就是说可以基于http协议来访问延迟系统&#xff0c;接下来要将延迟任务改造成一个服务。首要考虑的问题就是服务的注册与发现&#xff0c;服务的注册与发现都离不开服务的注册中心&#xff0c;本项目选取…...

数智读书笔记系列022《算力网络-云网融合2.0时代的网络架构与关键技术》读书笔记

一、书籍核心价值与定位 1.1 书籍概述:中国联通研究院的权威之作 《算力网络 —— 云网融合 2.0 时代的网络架构与关键技术》由中国联通研究院算力网络攻关团队精心撰写,是业界首部系统性探讨云网融合 2.0 与算力网络的专著。在云网融合从 1.0 迈向 2.0 的关键节点,本书的…...

人工智能在智能交通中的应用:以L4级无人电动物流拖车为例

一、引言 人工智能&#xff08;AI&#xff09;技术的飞速发展正在深刻改变各个行业&#xff0c;其中智能交通领域尤为显著。从自动驾驶汽车到智能交通管理系统&#xff0c;AI的应用不仅提高了交通效率&#xff0c;还增强了安全性。本文将重点探讨L4级无人电动物流拖车技术及其在…...

【愚公系列】《高效使用DeepSeek》024-儿童教育

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...

第十六届蓝桥杯康复训练--6

题目链接&#xff1a;790. 数的三次方根 - AcWing题库 思路&#xff1a;二分&#xff0c;注意正负号和小数判断退出的方法&#xff08;虽然正负无所谓&#xff09; 代码&#xff1a; #include<bits/stdc.h> using namespace std;#define exs 0.00000018812716007232667…...