Bootstrap

实时数据研发|Flink关键概念,什么是无界、有界数据集,流、批?

Flink 把流计算框架可能处理的数据集分为如下两种。

  • 无界数据集(unbounded dataset):无界数据集通常是持续不断产生的,就像河水一样不停流人。现实世界中的许多数据都是无界的数据集,比如电子商务交易日志、网站点击日志等。
  • 有界数据集(bounded dataset):有界的数据集通常是批次的,考虑Hadoop、MapReduce 处理的文件。

对应上述两种数据集,就有两种数据处理模型。

  • 流处理:流处理任务就是常说的实时任务,任务一直运行,持续不断地处理流入的无界的数据集。(持续不停地占用计算和内存资源)
  • 批处理:批处理任务对于自己要处理的有界数据集非常明确,处理完该数据集后就会释放有关计算和内存资源

Flink底层用流处理模型来同时处理上述两种数据。在Flink看来,有界数据集不过是无界数据集的一种特例;而Spark Streaming走了完全相反的技术路线,它把无界数据集分割成有界数据集再通过微批对待流计算。

同spak sueaming、storm 等流计算引擎一样,Flink的数据处理组件也被分为三类:
数据输人(souree)、数据处理(transformation)和数据输出(sink)。

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

数据流在两个transformation间传输数据有两种方式:

  • 一对一流 :保持元素间分区和排序;
  • redistribution流:改变流的分区。一次交换中,排序只保留在每对发送与接收子任务中。

Flink中时间:

  • 事件时间event time:事件中时间戳;
  • 采集时间 ingest time :事件进入数据流源算符的事件;
  • 处理时间process time:每个执行时间操作的运算符的本地时间。
;