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

flink jobgraph详细介绍

一、Flink JobGraph 的核心概念

JobGraph 是 Flink 作业的核心执行计划,它描述了作业的任务拓扑结构和数据流关系。JobGraph 由以下几部分组成:

  1. 顶点(Vertex)

    • 每个顶点代表一个任务(Task),例如 SourceSinkMapFilterAggregate 等。
    • 顶点之间通过边(Edge)连接,表示数据流的方向。
  2. 边(Edge)

    • 表示两个顶点之间的数据流关系。
    • 边有两种类型:ForwardShuffle
      • Forward:数据直接从前一个任务传递到下一个任务。
      • Shuffle:数据需要重新分区(Re-partitioning),例如根据键(Key)进行分区。
  3. 输入和输出(Input and Output)

    • 输入:表示任务的输入数据来源。
    • 输出:表示任务的输出数据去向。
  4. 配置信息(Configuration)

    • 包括作业的并行度、资源需求(如内存、CPU 等)、优化策略等。

二、Flink JobGraph 的生成过程

Flink 的作业从用户编写的程序开始,经过一系列的转换步骤,最终生成 JobGraph。以下是详细的生成过程:

  1. StreamGraph

    • 用户编写的 Flink 程序(如DataStream API 或 DataSet API)会被转换为 StreamGraph,这是一个高层次的逻辑表示。
    • StreamGraph 描述了作业的逻辑结构,但尚未进行优化。
  2. Optimized Plan

    • StreamGraph 会被 Flink 的优化器(Optimizer)进行优化,生成一个优化后的执行计划。
    • 优化器会根据数据流的特点(如分区方式、并行度等)调整任务的拓扑结构,以提高性能。
  3. JobGraph

    • 优化后的执行计划会被转换为 JobGraph,这是提交给 Flink 运行时的最终形式。
    • JobGraph 包含了任务的拓扑结构、数据流关系以及配置信息。

三、Flink 架构中的 JobGraph 流转与应用

在 Flink 的整体架构中,JobGraph 的流转和应用贯穿了整个作业的生命周期。以下是 JobGraph 在 Flink 架构中的关键作用:

1. 提交到 JobManager
  • 当用户提交一个 Flink 作业时,JobGraph 会被提交到 Flink 集群的 JobManager
  • JobManager 是 Flink 集群的控制中心,负责协调作业的执行。
2. 生成 ExecutionGraph
  • JobManager 会根据 JobGraph 生成 ExecutionGraph
  • ExecutionGraphJobGraph 的物理实现,它描述了作业在集群中的实际执行方式。
  • ExecutionGraphJobGraph 中的逻辑任务(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)、中间处理任务(如 MapFilterAggregate)和 Sink(如 HDFS、数据库)。
  • JobGraph 确保数据流在不同任务之间的高效传输和处理。
2. 批处理(Batch)
  • 在批处理场景中,JobGraph 同样适用。
  • 批处理作业通常包含数据源(如文件)、数据转换(如 MapReduce)和数据 sink(如文件输出)。
  • JobGraph 确保批处理任务的顺序执行和资源分配。
3. 复杂事件处理(CEP)
  • 在复杂事件处理场景中,JobGraph 可以描述复杂的事件匹配逻辑。
  • 例如,一个 CEP 作业可能包含事件序列匹配、模式识别等任务。
  • JobGraph 确保这些复杂逻辑的高效执行。

五、Flink JobGraph 的优化与容错

1. 优化
  • Flink 的优化器会根据 JobGraph 进行多种优化,例如:
    • 并行度调整:根据硬件资源和数据流量调整任务的并行度。
    • 分区优化:优化数据分区方式(如 Key-By 分区、Hash 分区)以减少数据在网络中的传输开销。
    • 资源分配:根据任务的需求分配 CPU、内存等资源。
2. 容错
  • Flink 的容错机制基于 CheckpointSavepoint
  • 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 一、模…...

从列表排序到看板拖拽:用Vue3和Vuedraggable打造三种常见业务场景(附动画效果源码)

Vue3与Vuedraggable实战:构建三种高交互业务场景的完整指南 在当今的前端开发中,拖拽交互已经成为提升用户体验的关键要素。无论是任务管理、看板系统还是表单设计器,流畅的拖拽效果都能显著提升产品的专业度和易用性。本文将带你深入探索Vu…...

从“看图说话”到“看视频说话”:手把手教你用InternVideo模型实现视频内容理解与检索

从“看图说话”到“看视频说话”:手把手教你用InternVideo模型实现视频内容理解与检索 视频正成为互联网内容的主流载体,但如何让机器真正"看懂"视频内容,一直是AI领域的核心挑战。传统视频分析技术往往局限于单一场景,…...

使用 taotoken 后如何清晰观测各模型调用用量与成本分布

使用 Taotoken 后如何清晰观测各模型调用用量与成本分布 1. 用量看板的核心功能 Taotoken 控制台提供的用量看板是开发者观测模型调用情况的核心工具。该看板默认展示最近 30 天的调用数据,支持按模型类型、时间范围和项目三个维度进行筛选。数据更新频率为每小时…...

taotoken 按 token 计费模式在长期项目中的成本可控感受

Taotoken 按 Token 计费模式在长期项目中的成本可控感受 1. 按 Token 计费的核心优势 在长期项目开发中,AI 调用成本的可预测性直接影响技术选型决策。Taotoken 采用的按 Token 计费模式,其核心价值在于让开发者只为实际消耗的计算资源付费。这种模式区…...

LeagueAkari:基于LCU API的英雄联盟客户端工具集,提升游戏效率与体验的全面解决方案

LeagueAkari:基于LCU API的英雄联盟客户端工具集,提升游戏效率与体验的全面解决方案 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-…...

如何轻松释放Windows内存:Mem Reduct完整使用指南

如何轻松释放Windows内存:Mem Reduct完整使用指南 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct 你是不…...

如何用BilibiliDown打造个人专属B站音乐库:5步实现高品质音频自由

如何用BilibiliDown打造个人专属B站音乐库:5步实现高品质音频自由 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/g…...

手把手教你用HanLP的CRF和NLP分词器:处理‘文心大模型’这类新词再也不怕了

深度解析HanLP分词器:如何精准处理"文心大模型"等科技新词 当"文心大模型"、"AI原生战略"这样的专业术语频繁出现在科技报道中,传统分词工具往往束手无策。本文将带您深入HanLP的CRF和NLP分词器核心,通过对比实…...

除了Stellar,还有哪些Excel文件修复工具值得一试?一份横向评测与选择指南

Excel文件修复工具横向评测:专业选型指南 当一份关键业务报表突然无法打开,或是财务模型显示"不可读内容"错误时,数据恢复工具的选择直接关系到工作效率与数据安全。市场上除了知名度较高的Stellar系列产品,还有多款各具…...

Win10/Win11系统下CUDA 11.6安装实录:我踩过的那些坑(临时路径、组件选择、环境变量)

Win10/Win11系统下CUDA 11.6安装实录:我踩过的那些坑 去年在部署一个深度学习项目时,我需要在Windows 11上安装CUDA 11.6。本以为按照官方文档一步步来就能轻松搞定,没想到整个过程充满了各种"惊喜"。今天我就把这些踩坑经历完整记…...