自学内容网 自学内容网

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 进行内部优化。例如,它可以对相邻的算子进行合并或者重新排序等操作,以减少数据传输的开销或者提高处理速度。同时,对于开发者来说,通过工具可以将这个逻辑拓扑结构可视化,帮助更好地理解程序的数据处理流程和可能存在的瓶颈。

原文地址:https://blog.csdn.net/2301_79992621/article/details/145205134

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!