Flink设计与实现:核心原理与源码解析
上QQ阅读APP看书,第一时间看更新

1.1.1 Stratosphere系统架构

Stratosphere是德国科学基金会(DFG)赞助的一个研究项目,目标是建立下一代大数据分析引擎。2010年,从Stratosphere项目上生出一个新的分支,就是Flink。Flink项目于2014年3月被交给Apache孵化,同年4月16日成为Apache的孵化项目,12月变成Apache顶级项目。

图1-1所示为Stratosphere的系统架构,从中可以看出,该项目主要分为Sopremo、PACT、Nephele三层架构,每一层都具有编程模型(programming model),即面向用户提供的编程API。

图1-1 Stratosphere架构设计

每一层系统之间的交互关系可以简单总结如下。

·Stratosphere作业的执行逻辑是通过Meteor脚本语言定义的。Meteor意为“流星”,专门用于组织特定领域的算子。它将算子视为“一等公民”,允许用户自由组合现有的算子,支持使用新的算子扩展语言及运行时等功能。Meteor其实和Pig Latin语言有些相似,Meteor最早是参考Jaql语言实现的,Jaql是IBM实验室贡献的另一种开源语言,已经发布在Google Code上并应用于多个项目。

·Sopremo组件主要用于接收用户定义的Meteor脚本,并对Meteor脚本进行解析,然后提供算子实现、算子信息抽取及外部算子集成等功能,最终通过PACT program assembler组件将Meteor脚本转换成PACT程序。Sopremo的功能和Flink的Table API相似,目的是向用户提供相应的结构化编程接口,使用户可以自由灵活地定义算子,最终转换成底层的算子并执行。

·Stratosphere组件提供了一个被称为PACT的显式编程模型,PACT模型抽象了并行化代码编程,隐藏了编写并行代码的复杂性。PACT模型可以实现单循环和迭代循环的计算作业类型,类似于Flink中的DataSet API,用于编写分布式数据批处理作业。

·通过PACT定义的数据处理模型会转换成Nephele Job Graph并提交到Nephele上运行,而Nephele Job Graph类似于Flink中的JobGraph。通过PACT定义的数据处理模型最终转换成有向无环图(DAG),DAG包括Source、Sink及Transform算子等节点,描述了算子之间的关系并将节点提交给Nephele所在的运行时运行。

·最下层是Nephele运行时。Nephele实际上就是Job Graph的执行引擎,用户提交的Job Graph会被调度和切分成Task作业,并提供调度、执行、资源管理、容错管理、I/O服务等功能,这与由JobManager和TaskManager构成的Flink运行时功能基本一致。

·Stratosphere提供了不同的资源管理器,例如当时比较流行的Amazon EC2、Apache YARN等资源管理器。同时,它支持的底层数据源有HDFS、Amazon S3等分布式数据源。

Stratosphere虽然能够实现灵活的分布式数据处理,支持通过类似于Pig Latin的Meteor脚本定义数据处理作业,但是和Spark相比,它的框架成熟度和市场占有率都没有太大的竞争力。那么,为什么基于Stratosphere发展而来的Flink却能够在短短的几年时间里迅速占领分布式流数据处理市场,得到众多企业采用,成为主流实时数据处理框架呢?

我认为,根本原因是Flink及时吸收和采用了Google开源论文提到的DataFlow/Beam编程思想,这使其成为当时功能最强大的开源流系统。此后不久,Flink又完成了一个轻量且高效的分布式异步快照算法实现,为端到端的数据一致性提供了强大保证。这里提到的分布式异步快照算法的原型是Chandy-Lamport算法,来自Chandy和Lamport的论文“分布式快照:确定分布式系统的全局状态”。基于Stratosphere原有架构,吸收DataFlow编程模型及分布式异步快照算法Chandy-Lamport等思想,Flink实现了高效兼容离线及流式数据处理。在当时的开源数据处理框架中,只有Flink能够同时保证低延时、高吞吐以及Exactly-Once数据一致性。在后期发展中,Flink逐步取代Storm,成为主流流式处理框架。

虽然Spark也在新版本Structed Streaming中吸收了DataFlow编程模型和Chandy-Lamport等优秀思想,但Flink已经在流式领域打下非常坚实的基础,并逐步向离线数据处理领域发展,实现了通过一套流式引擎完美兼容离线和流式两种类型的数据处理。我们来简单回顾一下,Flink早期借助Stratosphere项目实现大规模分布式离线数据处理,之后迅速调整方向,吸收DataFlow编程模型的优秀设计思想,迅速成长为流处理领域的独角兽,开始和Spark分庭抗礼。Flink和Spark未来谁会成为王者,决定了大数据领域的发展方向。

可以看出,DataFlow编程模型和Chandy-Lamport分布式异步快照算法对Flink技术的影响非常大。下面我们介绍与它们相关的两篇论文的核心思想,以加深读者对Flink架构的理解。