Flink 编程模型

一、处理程序层次

     Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。基于流执行引擎,Flink提供不同级别的抽象API来处理应用程序:

    一共包含有5种API:Process FunctionDataStream API 、DataSet API 、Table API 、SQL

  二、数据流       

          Flink程序的基本构建块是streamtransformatios。从概念上讲,stream是(可能永无止境的)数据记录流,而transformation是将一个或多个流作为一个或多个流的操作输入,并产生一个或多个输出流。执行时,Flink程序映射到数据流中,包括streamtransformation。每个数据流都以一个或多个source开头,并以一个或多个sink结束。通常,程序中的转换与数据流中的运算符之间存在一对一的对应关系。但是,有时一个转换可能包含多个转换运算符。

三、数据流并行

   

         Flink中的程序本质上是并行和分布式的。在执行期间,stream具有一个或多个流分区,并且每个operator具有一个或多个operator subtasksoperator subtasks彼此独立,并且可以在不同的线程中执行,并且可能在不同的机器上执行。operator subtasks的数量是该特定operator 的并行度。stream的并行性始终是其生成operator的并行性。同一程序的不同operator可能具有不同的并行级别。

          stream可以以一对一(或转发)模式或以重新分发模式传输数据:

  • 一对一:(例如,在上图中的Source和map()运算符之间)保留元素的分区和排序。

  • 重新分配:(在上面的map()和keyBy / window之间,以及 keyBy / window和Sink之间)重新分配流。每个运算符子任务将数据发送到不同的目标子任务,具体取决于所选的transformation。

     四、窗口模式

           聚合事件(例如,计数,总和)在stream上的工作方式与batch处理方式不同。例如,不可能计算stream中的所有元素,因为流通常是无限的(无界)。相反,流上的聚合(计数,总和等)由windows限定,例如“在最后5分钟内计数”或“最后100个元素的总和”。Windows可以是时间驱动的(例如:每30秒)或数据驱动(例如:每100个元素)。

     

     五、时间     

Flink支持3种类型的时间窗口,分别适用于用户对于时间窗口不同类型的要求:

Event Time:消息自带时间戳,根据消息的时间戳进行处理,确保时间戳在同一个时间窗口的所有消息一定会被正确处理。

Ingress Time:消息进入到Flink数据流种的时间

Operator Time:Task所在的节点信息处理时间

     六、容错机制

      Flink使用重新发送数据checkpoint的组合实现容错。checkpoint与每个输入stream中的特定点以及每个operator的对应状态相关。通过恢复operator的状态并从checkpoint处重新发送数据,可以从checkpoint处恢复流数据流,同时保持一致性(恰好一次处理语义)

猜你喜欢

转载自blog.csdn.net/wangyu1025391259/article/details/86528864