天天看点

Flink数据流编程模型一、抽象级别二、程序与数据流

一、抽象级别

         Flink提供了不同级别的抽象,以开放流或批处理作业

Flink数据流编程模型一、抽象级别二、程序与数据流

   1、 Stateful Stream Processing : 有状态流

            它是通过将过程函数(Processing Function)被嵌入到DataStream API中,它允许用户可以自由地处理来自一个或多个数据流的事件,并使用一致的容错的状态。除此之外,用户可以注册事件时间并处理时间回调,从而使程序可以处理复杂的计算。

       实际上,大多数应用并不需要上述的底层抽象,而是针对核心API(Core APIS)

2、Core APIS

        主要包括 DataStream API(有界或无界数据流)和DataSet API(有界数据集),这些API为数据体统了通用的构建板块,比如由用户定义的多种形式的转换(transformations),连接(joins),聚合(aggregations),窗口操作(windows),状态(state)等等。这些API处理的数据类型以类(classes)的形式由各自的编程语言所表示。

       底层 过程函数(Process Function) 与 DataStream API 相集成,使其可以对某些特定的操作进行底层的抽象。DataSet API 为有界数据集提供了额外的原语,例如循环与迭代。

3、Table API

        是以表为中心的声明式DSL,其中表可能会动态变化(在表达流数据时)。

       Table API遵循(扩展的)关系模型:表有二维数据结构(schema)(类似于关系数据库中的表),同时API提供可比较的操作,例如select、project、join、group-by、aggregate等。Table API程序声明式地定义了 什么逻辑操作应该执行 而不是准确地确定 这些操作代码的看上去如何 

     除此之外,Table API程序在执行之前会经过内置优化器进行优化

4、SQL

    Flink提供的最高层级的抽象是SQL ,和Table API类似,SQL抽象与Table API交互密切,同时SQL查询可以直接在Table API定义的表上执行。

二、程序与数据流

       Flink程序的基础构建模块是流(streams)与转换(transformations)。

       概念上来讲,流式(可能永无止境的)数据记录流,而转换时一种操作,它取一个或多个流作为输入,并产出一个或者多个输出流作为结果。 

     执行时,Flink程序映射到 流数据流(streaming dataflows) ,由 流 以及转换 算符 构成。每一个数据流起始于一个或多个 source,并终止于一个或多个 sink。数据流类似于任意的 有向无环图 (DAG)

Flink数据流编程模型一、抽象级别二、程序与数据流

  并行数据流

        Flink程序本质上是并行分布的。在执行过程中,一个 流 包含一个或多个 流分区 ,而每一个 算符 包含一个或多个 算符子任务 。操作子任务间彼此独立,以不同的线程执行,甚至有可能运行在不同的机器或容器上。

       算符子任务的数量即这一特定算符的 并行度 。一个流的并行度即其生产算符的并行度。相同程序中的不同的算符可能有不同级别的并行度。

Flink数据流编程模型一、抽象级别二、程序与数据流

流在两个算符之间传输数据,可以通过 一对一 (或称 forwarding )模式,或者通过 redistributing 模式:

窗口

聚合事件(比如计数、求和)在流上的工作方式与批处理不同。比如,对流中的所有元素进行计数是不可能的,因为通常流是无限的(无界的)。相反,流上的聚合需要由 窗口 来划定范围,比如 “计算过去的5分钟” ,或者 “最后100个元素的和” 。

窗口可以是 事件驱动的 (比如:每30秒)或者 数据驱动的 (比如:每100个元素)。窗口通常被区分为不同的类型,比如 滚动窗口 (没有重叠), 滑动窗口 (有重叠),以及 会话窗口 (由不活动的间隙所打断)

Flink数据流编程模型一、抽象级别二、程序与数据流

时间

当提到流程序(例如定义窗口)中的时间时,你可以参考不同的时间概念:

Event Time:   事件时间 是事件创建的时间。它通常由事件中的时间戳描述

Ingesion Time: 摄入时间 是事件进入Flink数据流源算符的时间。

Wdindow Processing Time: 处理事件 是每一个执行时间操作的算符的本地时间。

Flink数据流编程模型一、抽象级别二、程序与数据流

容错机制

    Flink使用 流重放 与 Checkpoint 的结合实现了容错。Checkpoint与每一个输入流及其相关的每一个算符的状态的特定点相关联。一个流数据流可以可以从一个checkpoint恢复出来,其中通过恢复算符状态并从检查点重放事件以保持一致性(一次处理语义)

检查点间隔是以恢复时间(需要重放的事件数量)来消除执行过程中容错的开销的一种手段。

继续阅读