Apache Flink就是其中的翘楚,它采用了基于操作符(operator)的连续流模型,可以做到微秒的延迟。Flink最核心的数据结构是Stream,它代表一个运行在多个分区上的并行流,它没有边界,随着时间的增长而不断变化,而且它是逐条进行操作的,每当有新数据进行就会被执行,这也是Flink低延迟的根本。
当一个Flink程序被执行的时候,会被映射为Streaming Dataflow,如下图:
图来自极客时间
其中,Streaming Dataflow由 Operator以及Stream组成,Transformation Operator把一个或多个Stream转换成Stream,一个Stream可以包含多个分区(Stream Partitions),一个操作符可以被分成多个操作符子任务,每个子任务在不同的线程或者不同的机器节点中独立执行。
Stream与Operator之间传输数据有两种形式:
Flink的架构如下图所示:
图来自极客时间
同样的,这架构也是大致分成4层:存储层、部署层、核心处理引擎层、high-level的API和库。
Flink的诞生总是有原因的,简单来说因为它统一了批处理和流处理,并且对于实时计算可以实现微秒级别的输出。
在下面的场景,可以优先使用Spark:
在下面的场景,可以优先使用Flink: