实时数仓

Flink基本概念之数据流编程模型(DataFlow Progr

2019-10-18  本文已影响0人  老羊_肖恩

功能层级抽象(Levels of Abstraction)

  Flink为开发Streaming、batch等不同的应用提供了四种不同层次的抽象:

Levels Of Abstraction

数据流(Dataflows)

  Stream和Transformation是Flink程序的最基础构建块,而常用的用来进行批处理的DataSet API的底层实现也是基于Stream的,具体的我们会在后面详细介绍。 从概念上来说,Stream就是一个数据记录流(默认是无界的),而Transformation是一个将一条或多条数据流作为输入并输出一条或多条数据流作为结果的过程。在执行的时候,Flink程序会被映射成由Streams和Transformation操作构成的流式的数据流转(Dataflows),Stream在每个Transformation操作之间流转。每一个Dataflow从一个或多个数据源(source)开始,结束于一个或多个数据接收池(sink),Dataflow通常类似于一个任意的有向无环图(DAG)。虽然通过迭代构造可以允许特殊形式的循环存在,但为了简单起见,我们在大多数情况下会忽略这一点。通常,程序中的转换与数据流中的操作之间存在一对一的对应关系,但是有时候一个转换可能包含多个转换操作。


并行数据流(Parallel Dataflows)

  Flink中的程序本质上是并行和分布式的。在程序的执行过程中,一个Stream可以有一个或多个Stream分区,一个Operator也有一个或多个Operator子任务。每个子任务之间是相互独立的,且在不同的线程中执行,也可能在不同的机器或容器中执行。Operator子任务的个数表示当前Operator的并行度(Parallelism),而Stream的并行度总是其产生的Operator的个数。同一个程序中的不同Operator往往具有不同的并行度。

Stream可以在两个Operator之间以一对一(One-to-One)或重新分配(Redistributing)的模式传输数据。

窗口(Windows)

  在流数据上,聚合事件(如count()、sum())的工作方式与在批处理中的方式有很大不同。因为理论上来说,流数据一般是无界的,因此在无界的数据进行计数是不可能的,而批处理不一样,数据都是有界的,进行计数很容易。因此在流数据的处理上,使用window对流数据进行界限划分,例如只统计过去十分钟以内的数据、只对最新的100条数据进行求和。
Window既可以是基于时间的也可以是基于数据本身的。Window根据类型的不同,分为滚动窗口(Tumbling Window)、滑动窗口(Sliding Window)、会话窗口(Session Window)以及全局串口(Global Window)

时间(Time)

  流处理程序中具有以下几种不同概念的时间:

有状态的操作(Stateful Operations)

  在一个数据流中,虽然大量的操作在某一时刻只关注一个独立的事件,但有些操作能够在多个事件之间记住一些信息,这些操作被称为有状态的操作(Stateful Operations),而这些状态维护在一个内嵌的key/value形式的存储中。这些状态会随着被有状态的操作读取的流数据一起进行严格的分区。因此,只有在keyBy()函数之后才能访问key/value状态,并且只能访问与当前事件的key相关的值,如下图所示。将流的key和状态进行对齐,可以确保所有状态的更新都是本地操作(local operation),从而在不增加事务开销的同时保证一致性。这种对齐还允许Flink重新透明地分配状态并调整流数据的分区。

容错检查点(Checkpoints for Fault Tolerance)

  Flink使用流回放(Stream replay)和检查点(checkpointing)的组合实现容错。检查点与每个输入流中的特定点以及每个操作符的对应状态相关。流式数据流可以在检查点上通过恢复操作符的状态并从检查点重播事件的方式来保持一致性(一次处理语义),进而对当前的数据流进行恢复。检查点间隔是一种用恢复时间(需要重播的事件数量)来平衡执行期间的容错开销的方法。

流的批处理(Batch on Streaming)

  Flink将批处理程序作为一种特殊情况的流程序进行执行,其中流是有界的(元素的数量是有限的)。DataSet在程序内部会被视为流式的数据。因此,上面的流编程模型相关的概念同样适用于批处理程序吗,只有少数例外:

  1. https://ci.apache.org/projects/flink/flink-docs-release-1.9/concepts/programming-model.html
上一篇下一篇

猜你喜欢

热点阅读