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

网页设计网站搭建合肥哪家公司做网站

网页设计网站搭建,合肥哪家公司做网站,网页模板源代码之家,网站下拉菜单怎么做前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 思维导图 📌 引言 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()) 
http://www.dtcms.com/wzjs/615172.html

相关文章:

  • 网站开发教程H5有专做代金券的网站吗
  • 建站过程英文网站的首页怎么做
  • 国外建设网站流程小满crm外贸系统
  • 网站 设计 分辨率阿里域名注册网站
  • 南宁公司网站建设方案青岛创世网络网站建设
  • 网站中加入企业qq福田网站 建设深圳信科
  • 协会网站信息平台建设哪个做网站公司好
  • 开发网站的财务分析如何做网站卡密
  • 哪些网站自己做宣传建一个电影网站多大 数据库
  • html可以做网站吗学软件开发需要什么基础
  • 天津外贸网站建设wordpress完成用户注册
  • .mom域名可以做网站吗抖音代运营报价单
  • 找网络公司做的网站到期后 备案的域名属于备案企业还是网络公司wordpress+商场源码
  • 网页设计与网站建设完全教程专科医院网站建设
  • gucci网站wordpress 主题名字
  • cms 网站群wordpress查看访问
  • 网站源码生成器哪个网站
  • 编辑app用什么软件seo企业优化顾问
  • seo网站优化排名二建注册查询系统
  • 福田网站建设龙岗网站建设罗湖网站建设罗湖网站建设零食网站模板
  • 重庆网站建设合肥公司wordpress文章目录修改
  • 四合一网站石家庄站到正定机场
  • 怎样开个人网站二手房交易网站开发源码
  • 电子商务网站建设清华大学the7 wordpress 汉化
  • 如何加快网站打开速度搜索热词排行榜
  • 淮安企业网站建筑设计网站排行榜
  • 常州网站快速排名优化网站建设哪家做的好一点
  • 太原零元网站建设互联网医院网站建设
  • 新浦网站制作什么网站可以做报名系统
  • 注册网站什么要求白银市住房和城乡建设厅网站首页