Apache Flink官方文档——概念

  

数据流编程模型

  

原文链接
博主理解篇

  

抽象层次

  

? ? Flink提供不同级别的抽象来开发流/批处理应用程序。

  

 Apache Flink官方文档——概念

  
      <李>这个最低级别的抽象提供了有状态的流式操作。它是通过处理函数嵌入到DataStream数据API。它允许用户自由的处理一个或者多个数据流中的事件,并且使用一致,容错的状态。此外,用户可以注册事件时间和处理时间回调,允许程序实现复杂的计算。   <李>实际上,大多数应用不需要上面描述的低级别抽象,而是针对核心API(核心API),例如:DataStream数据API(有边界和无边界的数据流)和数据集的API(有边界的数据集)。这些流畅的API提供通用数据处理,像用户指定的各种形式的转换(转换),连接(连接),聚合聚(合),windows(窗口化操作),状态(状)态等等。这些API表示在各自的编程语言中为类(类)中的数据类型进行处理。   
  

? ?低阶的处理函数集成了DataStream数据API,这样就可以针对特性的操作使用低层级的抽象.DataSet API为有边界的数据集提供了附加的原语,例如循环/迭代。

  
      <李>表API是一种以表为中心的声明式的DSL,它可能会被动态的改变(当处理数据流的时候).Table API遵循扩展模型:表有一个附加模式(类似于关系型数据库表)并且API提供了类似的操作,例如:选择、项目,加入,group by,聚合等等.Table API声明式的定义了逻辑操作应该怎么做而不是确切的指定操作的代码看起来如何。尽管表API可以通过多种形式的用户自定义函数来扩展,它的表现还是不如核心API,但是用起来更加的简洁(写更少的代码)。此外,表API还可以执行一个优化器,适用于优化规则之前执行。
    ? ?表和数据流/数据集之间可以无缝的转换,允许程序组合使用表api和数据流和数据集的api。   <李> Flink最高级别的抽象是sql。这种抽象在语义和表达上面类似于表API,但将程序表示为sql查询表达式. sql抽象与表API紧密联系在一起,sql查询可以在表API定义的表中执行。   

    程序和数据流

      

    ? ? Flink程序的基本构建模块是<>强流(流)和 <强>转换(转换)。(需要注意的是,Flink API的数据集所使用的数据集内部也是流——更多内容将在以后解释)。从概念上讲流(可能没有结束)是一个数据流记录,而转换是一个操作,它取一种或者多个流作为输入,并产生一个或者多个输出流作为结果。
    ? ?当执行的时候,Flink程序映射到<强>流媒体数据流(流数据流),由<强>流强和转换<强>操作符强组成。每一个数据流开始于一个或者多个<强> 来源,并且终止于一个或者多个<强> 强。数据流类似于任意的<>强有向无环图(熟练的技艺)强。虽然通过迭代构造允许特定形式的环,但是大多数情况下,简单起见,我们都不考虑这一点。
     Apache Flink官方文档——概念“> <br/> ? ?通常情况下,程序中的转换与数据流中的操作是一一对应的。有时,然而,一个转换可能有多个转换操作构成。<br/> ? ?源和汇的文档在流连接器和批连接器.Transformation的文档在DataStream数据操作和数据集转换。</p>
  <h3>并行数据流</h3>
  <p> ? ? Flink程序本质上是并行的和分布式的。在执行过程中,一个流(流)包含一个或多个流分区(流分区),而每一个运营商包含一个或多个运营商子任务。操作子任务之间彼此独立,在不同的线程中执行,甚至有可能运行在不同的机器或容器上。<br/> ? ?运营商子任务的数量即是此特定运营商的并行度。一个流的并行度即其生产运营商的并行度。相同程序中的不同的运营商可能有不同级别的并行度。<br/> <img src=Apache Flink官方文档——概念