Apache Flink 的历史

1,564 阅读2分钟
原文链接: click.aliyun.com

研究分布式技术的工程师们总是希望彻底发掘出分布式技术的极限。

技术发展早期,主要的研究方向是速度更快、性价比更高的处理数据手段,这个方向的需求最终被 Hadoop 所解决,几乎每个人都开始使用 Hadoop 和它的生态系统来实现原有的 ETL 流程。

在这之后出现的新的数据处理需求就是处理流式数据(data in a streaming manner),这个方向的研究产生了 Apache Spark 和 Flink 这样的技术。它们支持的快速处理引擎(fast processing engines)、快速缩放能力(the ability to scale in no time)以及机器学习库和图处理库等特性正在将这些技术推广到开发人员社区。

现有的大数据处理架构先行者包括 Apache Spark 和 Apache Storm 等等,真的需要 Flink 这样一个新的框架吗?这是一个重要且首当其冲的问题,在这里可以简单的作出粗略的回答。
最重要的一点是 Flink 的底层直接就是流处理系统,它是一个彻彻底底的的流处理引擎,而不是类似于 Spark Streaming 这样将流收集成小批(mini batches)进行快速处理的引擎,相比起 Apache Storm,Flink 基于 Kappa 架构而不是 Lambda 架构,这意味着它是更纯粹的流处理引擎。Flink 将批处理看作是流处理的特例。

Flink 最早是作为一个研究项目以 Stratosphere 的名字公布的,意在为柏林学术圈设计一个下一代(next generation)大数据处理系统。在 2014 年 4 月 16 日,Flink 成为 Apache 孵化项目。Stratosphere 的最初版本基于论文 Nephele 09,下图展示了 Stratosphere 的演化过程。

stratosphere_evolution

Stratosphere 的最初版本主要着眼点是实现运行时(runtime)和优化器(optimizer),提供了 Java API;此后随着项目的成熟,它开始支持在本地环境和 YARN 上的部署。从 0.6 版本开始,Stratosphere 改名为 Flink,此后 Flink 开始将重点转移到同时支持批处理和流处理,支持图处理和机器学习等更多特性上。Flink 0.7 引入了一个非常重要的特性,Flink Streaming API;最初的版本只有 Java API,而在这之后还实现了 Scala API,以及实验性的 Python API。