20250118 Flink中的延迟执行机制和数据处理的逻辑拓扑结构(向圖)

一. 延迟执行机制

  1. 延迟执行机制

    收起

    java

    复制代码
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    DataStream<String> inputStream = env.fromElements("input1", "input2", "input3");
    DataStream<Integer> outputStream = inputStream.map(str -> str.length()).filter(len -> len > 3);
    • Flink 采用延迟执行(Lazy Evaluation)模式。在程序的main方法执行阶段,只是构建了数据处理的逻辑拓扑,也就是将各个算子(如mapfilter等)添加到一个有向图(Dataflow Graph)中。这个阶段并没有真正的数据加载和处理操作。例如,当你定义一个DataStream并对其进行一系列的转换操作,如:
    • 在这部分代码执行时,mapfilter算子只是被添加到了数据处理的逻辑拓扑结构中,并没有真正开始处理数据。
  2. 执行触发

    • 只有当执行环境(StreamExecutionEnvironmentExecutionEnvironment)的execute()方法被调用时,Flink 才会根据构建好的有向图来真正地执行数据处理流程。这使得 Flink 能够在执行之前对整个数据处理流程进行优化,比如确定算子的执行顺序、并行度等。而且这种执行方式也使得程序在本地执行和在集群执行的切换比较灵活,取决于执行环境的配置。如果是本地执行环境(LocalStreamExecutionEnvironment等),数据处理就会在本地机器上进行;如果是集群执行环境(RemoteStreamExecutionEnvironment等),数据处理就会在集群中的多个节点上分布式地进行。这种机制有助于提高程序的可移植性和灵活性,同时也能够有效地利用计算资源。

二. 逻辑拓扑结构(向圖)

  1. 有向图的基本概念
    • 在 Flink 中,数据处理的逻辑拓扑结构以有向图(Directed Graph)的形式存在。有向图由顶点(Vertices)和边(Edges)组成。在 Flink 的数据处理场景下,顶点代表算子(Operators),比如mapfilterreduce等操作;边代表数据的流向,也就是数据从一个算子流向另一个算子的通道。
    • 例如,假设有一个简单的 Flink 程序,首先从数据源读取数据(可以看作是一个 "数据源算子"),然后进行map操作,再进行filter操作。在这个逻辑拓扑结构的有向图中,就会有三个顶点,分别代表数据源、map算子和filter算子。会有两条边,一条从数据源指向map算子,表示数据从数据源流向map算子;另一条从map算子指向filter算子,表示经过map处理后的数据流向filter算子。
  2. 分层理解
    • 算子层(Vertices)
      • 每个算子都有其特定的功能。以map算子为例,它会对输入的每个数据元素进行转换操作。假设输入的是一个数据流,其中的数据元素是字符串,map算子可能会将每个字符串转换为其长度。filter算子则会根据给定的条件筛选数据元素,例如只保留长度大于某个值的字符串长度数据。这些算子就像流水线上的不同加工站,对数据进行不同的处理。
    • 数据流层(Edges)
      • 数据在算子之间通过数据流进行传递。数据流的方向是由有向图的边来定义的。数据的流动是基于事件驱动的,当有新的数据元素在数据源产生后,它会沿着有向图的边,依次经过各个算子进行处理。例如,在一个实时流处理程序中,数据源不断产生新的数据,这些数据就会按照有向图规定的路径,从一个算子快速地 "流动" 到下一个算子,进行持续不断的处理。
  3. 优势
    • 并行处理规划 :这种有向图结构有助于 Flink 规划并行处理。因为可以清楚地看到数据的流动路径,Flink 可以根据硬件资源和算子的特性,将不同的算子分配到不同的计算节点上并行执行,同时还能保证数据按照正确的顺序在各个节点之间流动。例如,在一个大数据集的处理场景中,如果有多个map算子,Flink 可以将它们分配到多个 CPU 核心或者多个集群节点上,同时处理不同的数据子集,从而提高处理效率。
    • 优化和可视化:逻辑拓扑结构便于 Flink 进行内部优化。例如,它可以对相邻的算子进行合并或者重新排序等操作,以减少数据传输的开销或者提高处理速度。同时,对于开发者来说,通过工具可以将这个逻辑拓扑结构可视化,帮助更好地理解程序的数据处理流程和可能存在的瓶颈。
相关推荐
IT小哥哥呀8 小时前
电池制造行业数字化实施
大数据·制造·智能制造·数字化·mom·电池·信息化
Xi xi xi8 小时前
苏州唯理科技近期也正式发布了国内首款神经腕带产品
大数据·人工智能·经验分享·科技
yumgpkpm9 小时前
华为鲲鹏 Aarch64 环境下多 Oracle 、mysql数据库汇聚到Cloudera CDP7.3操作指南
大数据·数据库·mysql·华为·oracle·kafka·cloudera
UMI赋能企业9 小时前
制造业流程自动化提升生产力的全面分析
大数据·人工智能
TDengine (老段)10 小时前
TDengine 数学函数 FLOOR 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
派可数据BI可视化12 小时前
商业智能BI 浅谈数据孤岛和数据分析的发展
大数据·数据库·数据仓库·信息可视化·数据挖掘·数据分析
jiedaodezhuti13 小时前
Flink性能调优基石:资源配置与内存优化实践
大数据·flink
Lx35214 小时前
Flink窗口机制详解:如何处理无界数据流
大数据
Lx35214 小时前
深入理解Flink的流处理模型
大数据
Lx35214 小时前
Flink vs Spark Streaming:谁更适合你的实时处理需求?
大数据