Flink 算子链设计和源代码实现

1、JobGraph (JobManager)

JobGraph 生成时,通过 ChainingStrategy 连接算子,最终在 Task 中生成 ChainedDriver 链表。


StreamingJobGraphGeneratorcreateJobGraph() 构建jobGrapch 包含 JobVertex setChaining() 构建算子链isChainable() 是否可以合并算子
-- 算子链没有禁用
-- 下游算子非head
-- 并行度一致
-- 相同slot
-- partitioner ForwardcreateChain 递归构建JobVertexJobVertex jobVertex = jobVertexBuildContext.getJobVertex(startNodeId);if (jobVertex == null) {jobVertex =createJobVertex(chainInfo, serializationExecutor, jobVertexBuildContext);}

2、ExecutionGraph(JobManager)

ExecutionVertex:代表一个并行子任务(即一个算子链的实例)

  • 作用:将 JobVertex 拆解为并行子任务,每个子任务对应一个 ExecutionVertex
  • 核心对象
    • ExecutionJobVertex:与 JobVertex 一一对应,管理并行实例。
    • ExecutionVertex:代表一个并行子任务(即一个算子链的实例)

3、物理执行计划(TaskManager)

作用:将 ExecutionVertex 调度到 TaskManager 的 Slot 中运行。

OperatorChain 管理算子链的结构,负责算子的初始化、状态管理和数据传递。

<pre>
first\main (multi-input) -> ... -> tail/
second
</pre>@Nullable protected final StreamOperatorWrapper<OUT, OP> mainOperatorWrapper;
@Nullable protected final StreamOperatorWrapper<?, ?> firstOperatorWrapper;
@Nullable protected final StreamOperatorWrapper<?, ?> tailOperatorWrapper;

StreamOperatorWrapper 包装单个算子,维护算子间的链式关系,处理数据在算子间的流转。

 private StreamOperatorWrapper<?, ?> previous;private StreamOperatorWrapper<?, ?> next;

*StreamIterationHead/StreamIterationTail* 迭代场景下的特殊任务,分别处理迭代的头部(反馈输入)和尾部(反馈输出),通过阻塞队列实现迭代数据循环

4、链化策略类型

  • ALWAYS:默认策略,尽可能与上下游算子链化(如 mapfilter)。
  • HEAD:仅与下游链化,不与上游链化(如 Source 算子)。
  • NEVER:独立成 Task,不与任何算子链化

5、算子链执行流程与优化技术

  1. 链化过程
    • 编译阶段:将满足条件的算子合并为 OperatorChain,生成一个 Task 而非多个独立 Task。
    • 运行时ChainedDriver 在单线程内按拓扑顺序执行链内算子,数据通过 CopyingChainingOutput(默认深拷贝)或 BroadcastingOutput(对象重用)传递。
  2. 性能权衡
    • 优点:减少线程数、网络 IO,提升吞吐并降低延迟。
    • 缺点:长链路可能阻塞,需通过 startNewChain()disableChaining() 手动拆分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917169.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对接八大应用渠道

背景最近公司想把游戏包上到各个渠道上&#xff0c;因此需要对接各种渠道&#xff0c;渠道如下&#xff0c;oppo、vivo、华为、小米、应用宝、taptap、荣耀、三星等应用渠道 主要就是对接登录、支付接口&#xff08;后续不知道会不会有其他的&#xff09;&#x…

学习:入门uniapp Vue3组合式API版本(17)

42.打包发行微信小程序的上线全流程 域名 配置 发行 绑定手机号 上传 提交后等待&#xff0c;上传 43.打包H5并发布上线到unicloud的前端页面托管 完善配置 unicloud 手机号实名信息不一致&#xff1a;请确保手机号的实名信息与开发者姓名、身份证号一致&#xff0c;请前往开…

SOLIDWORKS材料明细表设置,属于自己的BOM表模板

上一期我们了解了如何在SOLIDWORKS工程图中添加材料明细表?接下来&#xff0c;我们将进行对SOLIDWORKS材料明细表的设置、查看缩略图、模板保存的深度讲解。01 材料明细表设置菜单栏生成表格后左侧菜单栏会显示关于材料明细表的相关设置信息。我们先了解一下菜单栏设置详情&am…

全栈:Maven的作用是什么?本地仓库,私服还有中央仓库的区别?Maven和pom.xml配置文件的关系是什么?

Maven和pom.xml配置文件的关系是什么&#xff1a; Maven是一个构建工具和依赖管理工具&#xff0c;而pom.xml&#xff08;Project Object Model&#xff09;是Maven的核心配置文件。 SSM 框架的项目不一定是 Maven 项目&#xff0c;但推荐使用 Maven进行管理。 SSM 框架的项目可…

超越 ChatGPT:智能体崛起,开启全自主 AI 时代

引言 短短三年,生成式 AI 已从对话助手跨越到能自主规划并完成任务的“智能体(Agentic AI)”时代。这场演进不仅体现在模型规模的提升,更在于系统架构、交互范式与安全治理的全面革新。本文按时间线梳理关键阶段与核心技术,为您呈现 AI 智能体革命的脉络与未来趋势。 1. …

一杯就够:让大脑瞬间在线、让肌肉满电的 “Kick-out Drink” 全解析

一杯就够&#xff1a;让大脑瞬间在线、让肌肉满电的 “Kick-out Drink” 全解析“每天清晨&#xff0c;当闹钟还在哀嚎&#xff0c;你举杯一饮&#xff0c;睡意像被扔出擂台——这&#xff0c;就是 Kick-out Drink 的全部浪漫。”清晨 30 分钟后&#xff0c;250 mL 常温水里溶解…

系统开机时自动执行指令

使用 systemd 创建一个服务单元可以让系统开机时自动执行指令&#xff0c;假设需要执行的指令如下&#xff0c;运行可执行文件&#xff08;/home/demo/可执行文件&#xff09;&#xff0c;并输入参数&#xff08;–input/home/config/demo.yaml&#xff09;&#xff1a; /home/…

Docker 初学者需要了解的几个知识点 (七):php.ini

这段配置是 php.ini 文件中针对 PHP 扩展和 Xdebug 调试工具的设置&#xff0c;主要用于让 PHP 支持数据库连接和代码调试&#xff08;尤其在 Docker 环境中&#xff09;&#xff0c;具体解释如下&#xff1a;[PHP] extensionpdo_mysql extensionmysqli xdebug.modedebug xdebu…

【高阶版】R语言空间分析、模拟预测与可视化高级应用

随着地理信息系统&#xff08;GIS&#xff09;和大尺度研究的发展&#xff0c;空间数据的管理、统计与制图变得越来越重要。R语言在数据分析、挖掘和可视化中发挥着重要的作用&#xff0c;其中在空间分析方面扮演着重要角色&#xff0c;与空间相关的包的数量也达到130多个。在本…

dolphinscheduler中一个脚本用于从列定义中提取列名列表

dolphinscheduler中&#xff0c;我们从一个mysql表导出数据&#xff0c;上传到hdfs, 再创建一个临时表&#xff0c;所以需要用到列名定义和列名列表。 原来定义两个变量&#xff0c;不仅繁锁&#xff0c;还容易出现差错&#xff0c;比如两者列序不对。 所以考虑只定义列定义变量…

JavaWeb(苍穹外卖)--学习笔记16(定时任务工具Spring Task,Cron表达式)

前言 本篇文章是学习B站黑马程序员苍穹外卖的学习笔记&#x1f4d1;。我的学习路线是Java基础语法-JavaWeb-做项目&#xff0c;管理端的功能学习完之后&#xff0c;就进入到了用户端微信小程序的开发&#xff0c;用户端开发的流程大致为用户登录—商品浏览&#xff08;其中涉及…

灵敏度,精度,精确度,精密度,精准度,准确度,分辨率,分辨力——概念

文章目录前提总结前提 我最近在整理一份数据指标要求的时候&#xff0c;总是混淆这几个概念&#xff1a;灵敏度&#xff0c;精度&#xff0c;精确度&#xff0c;精密度&#xff0c;精准度&#xff0c;准确度&#xff0c;分辨率&#xff0c;分辨力&#xff0c;搜了一些文章&…

python-异常(笔记)

#后续代码可以正常运行 try:f open("xxx.txt","r",encodingutf-8)except:print("except error")#捕获指定异常&#xff0c;其他异常报错程序中止&#xff0c;管不到 try:print(name) except NameError as you_call:print("name error"…

[lvgl_player] 用户界面(LVGL) | 播放器核心设计

docs&#xff1a;基于LVGL的音乐播放器 本项目是为嵌入式设备设计的音乐播放系统&#xff0c;采用LVGL图形库构建用户界面。 系统支持播放WAV格式音频文件&#xff0c;具备播放列表管理功能&#xff0c;可实现播放/暂停控制、曲目切换等核心操作。 用户可通过交互界面实时调…

数据赋能(354)——数据分析——多角度分析原则

概述重要性如下&#xff1a;获得全面理解&#xff1a;多角度分析原则避免仅从单一角度解读数据&#xff0c;从不同角度、不同维度对数据进行分析&#xff0c;以获得更全面的理解。发现潜在规律&#xff1a;通过多角度分析&#xff0c;发现数据中的潜在规律和趋势&#xff0c;为…

【华为机试】127. 单词接龙

文章目录127. 单词接龙描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;解题思路算法分析问题本质分析单向BFS算法详解双向BFS算法详解邻居单词生成过程算法流程图边界情况分析各种解法对比时间复杂度分析空间复杂度分析关键优化点实际应用场景图构建策略双向BFS优化…

仿艾莫迅MODBUS调试工具写一个上位机

公司采购了一个夹具&#xff0c;项目负责人想要试探这个夹具的性能&#xff0c;于是想要我这边写一个烤机的程序&#xff0c;小编结合官网资料 https://wiki.amsamotion.com/?title196&doc222查看其pdf说明文档和调试工具并按照其工具写一个烤机上位机根据项目负责人的要求…

云展厅:开启数字化展示新时代

在科技飞速发展的今天&#xff0c;数字化浪潮正席卷各个行业&#xff0c;展览展示领域也不例外。云展厅作为一种全新的展览形式&#xff0c;正逐渐崭露头角&#xff0c;以其独特的优势和创新的技术应用&#xff0c;为观众带来前所未有的观展体验&#xff0c;也为企业和机构提供…

硬件电路基础学习

一、基础元器件学习 1、电阻 1.1 作用 电阻的工作原理是基于欧姆定律&#xff0c;即电阻的阻值取决于其材料、长度和横截面积。电阻的主要作用是限制电流&#xff0c;调节电压和电流&#xff0c;以及保护电路。1.2 数值计算 欧姆定律 通过欧姆定律计算所需保护电阻的大小注意…

基于C++和人工智能(DeepSeek)实践

基于C++和人工智能(如DeepSeek)实践 以下是基于C++和人工智能(如DeepSeek或其他AI框架)的实际应用示例,涵盖不同领域和技术方向,供参考: 基于C++和人工智能(如DeepSeek或其他AI框架)的实际应用示例 图像识别与处理 人脸检测:使用OpenCV和DNN模块加载预训练的Caffe…