zoukankan      html  css  js  c++  java
  • Flink的DataStream的详细介绍

    一:流处理的基本概念

      流处理系统本身有很多自己的特点。一般来说,由于需要支持无限数据集的处理,流处理系统一般采用一种数据驱动的处理方式。它会提前设置一些算子,然后等到数据到达后对数据进行处理。

      为了表达复杂的逻辑,flink在内的分布式流处理引擎,一般采用 DAG 图来表示整个计算逻辑,其中 DAG 图中的每一个点就代表一个基本的逻辑单元,也就是前面说的算子,由于计算逻辑被组织成有向图,数据会按照边的方向,从一些特殊的 Source 节点流入系统,然后通过网络传输、本地传输等不同的数据传输方式在算子之间进行发送和处理,最后会通过另外一些特殊的 Sink 节点将计算结果发送到某个外部系统或数据库中。

      上图中的逻辑模型所说的是我们整体项目的一个内部逻辑关系, 但是由于我们所使用的的算子可能有多个处理实例,例如c这个算子可能有两个实例,所以物理上又会有一定的上游和下游的关系。但是只有算子的实例不在同一个进程上运行时,才会出现网络传输,算子的实例在同一个进程中是不会存在网络传输的。

    二:DataStream的基本转换

    说明:该图说明DataStream是产生其它流的一个基础,当我们读进来数据的时候,首先生成的是DataStream,在通过其它的算子产生别的Stream,例如通过KeyBy产生KeyedStream,之后可以在进行一些window操作,产生WindowedStream。但是我们比较常用的是KeyedStream。

    三:交换数据的物理分组方式

      Global: 上游算子将所有记录发送给下游算子的第一个实例。

      Broadcast: 上游算子将每一条记录发送给下游算子的所有实例。(小数据量)

      Forward:只适用于上游算子实例数与下游算子相同时,每个上游算子实例将记录发送给下游算子对应的实例。

      Shuffle:上游算子对每条记录随机选择一个下游算子实例进行发送。

      Rebalance:上游算子通过轮询的方式发送数据。

      Rescale:本地轮询的方式发送数据。

      PartitionCustomer:当上述内置分配方式不满足需求时,用户还可以选择自定义分组方式。

    四:支持的类型系统

      Flink DataStream 对像都是强类型的,每一个 DataStream 对象都需要指定元素的类型,Flink 自己底层的序列化机制正是依赖于这些信息对序列化等进行优化。具体来说,在 Flink 底层,它是使用 TypeInformation 对象对类型进行描述的,TypeInformation 对象定义了一组类型相关的信息供序列化框架使用。

    类型 说明
    基本类型 Java的基本类型(包装类),以及void,String,Date等
    复合类型 Tuple和scala的case class (不支持null,tuple不能超过25个字段),Row,PoJO
    辅助、集合类型 Option,Map,List
    上述类型的数组  
    其他类型 自定义TypeInformation或kyro处理,但是不推荐使用

     五:DataStreamApi的原理介绍

      当我们调用 DataStream#map 算法时,Flink 在底层会创建一个 Transformation 对象,这一对象就代表我们计算逻辑图中的节点。它其中就记录了我们传入的 MapFunction,也就是 UDF(User Define Function)。随着我们调用更多的方法,我们创建了更多的 DataStream 对象,每个对象在内部都有一个 Transformation 对象,这些对象根据计算依赖关系组成一个图结构,就是我们的计算图。后续 Flink 将对这个图结构进行进一步的转换,从而最终生成提交作业所需要的 JobGraph。

    这是我们代码生成的数据转换图

    运行时产生的算子图是这样的

     转换图中的一些转换包括union、split、select 最终都是将数据源连接到map算子,所以会在运行的时候产生这样的图例。

  • 相关阅读:
    【Android SDK Manager】SDk国内镜像下载地址
    DS博客作业02--线性表
    C语言博客作业06--结构体&文件
    C语言博客作业05--指针
    C语言博客作业04--数组
    函数
    循环结构
    C语言顺序结构和分支结构总结
    第0次作业
    TypeError: chart_js__WEBPACK_IMPORTED_MODULE_0__.default is not a constructor
  • 原文地址:https://www.cnblogs.com/lyr999736/p/12102286.html
Copyright © 2011-2022 走看看