Apache Flink论文简读
Apache Flink™: Stream and Batch Processing in a Single Engine
Flink不同于Spark的batch processing,它着眼于data streaming processing。它的输入可被看做一条无穷的stream,将函数应用到stream上,再输出。Flink底层是流式处理,延迟更小,但是在某些时候batch processing可能更有效,因此Flink在上层也基于流式处理构建了batch处理,它通过记录流式处理的start point,以及维护流式运行过程中的state来实现一个窗口的batch处理。
batch处理与流式处理的异同
- batch看到是一个dataset,它可认为是一堆无序的records集合,然后将算法应用到dataset上面。Spark采用的内存型的RDD,然后将其划分成一个个的小的batch,Schedule这些batch到不同的机器上执行。Spark的batch处理过程可看做一个有向无环图,在多轮iteration的过程中,会不断的schedule job,会有一定的处理时延。
- 流式处理看到的是一条具有无限输入的记录流,与batch不同的是,它的输入有序,并有时间戳的概念。Flink在这个数据流上应用算法处理数据,延迟很低;在有batch需求的场景下,可通过设置流处理起始点,并记录处理状态,更新状态,来实现batch处理。此外,Flink有一个专门设计的API来支持static datasets,它使用专门的数据结构和算法,往往更高效。