1.Flink引入
这几年大数据的飞速发展,出现了很多热门的开源社区,其中著名的有 Hadoop、Storm,以及后来的 Spark,他们都有着各自专注的应用场景。Spark 掀开了内存计算的先河,也以内存为赌注,赢得了内存计算的飞速发展。 Spark 的火热或多或少的掩盖了其他分布式计算的系统身影。就像 Flink,也就在这个时候默默的发展着.在国外一些社区,有很多人将大数据的计算引擎分成了 4 代,当然,也有很多人不会认同。我们先姑且这么认为和讨论。
首先第一代的计算引擎,无疑就是 Hadoop 承载的 MapReduce。
这里大家应该都不会对 MapReduce 陌生,它将计算分为两个阶段,分别为 Map 和 Reduce。对于上层应用来说,就不得不想方设法去拆分算法,甚至于不得不在上层应用实现多个 Job 的串联,以完成一个完整的算法,例如迭代计算。
由于这样的弊端,催生了支持 DAG 框架的产生。因此,支持 DAG 的框架被划分为第二代计算引擎。
如 Tez 以及更上层的 Oozie。这里我们不去细究各种 DAG 实现之间的区别,不过对于当时的 Tez 和 Oozie 来说,大多还是批处理的任务。特点:批处理 1 个 Tez = MR(1) + MR(2) + … + MR(n),相比 MR 效率有所提升
接下来就是以 Spark 为代表的第三代的计算引擎。
第三代计算引擎的特点主要是:Job 内部的DAG支持(不跨越Job),以及强调的实时计算。在这里,很多人也会认为第三代计算引擎也能够很好的运行批处理的 Job。随着第三代计算引擎的出现,促进了上层应用快速发展,例如各种迭代计算的性能以及对流计算和 SQL 等的支持。特点:批处理、流处理、SQL 高层 API 支持,自带 DAG 内存迭代计算、性能较之前大幅提升Flink的诞生就被归在了第四代。这应该主要表现在 Flink 对流计算的支持以及更一步的实时性上面。当然 Flink 也可以支持 Batch 的任务,以及 DAG 的运算。首先,我们可以通过下面的性能测试初步了解两个框架的性能区别,它们都可以基于内存计算框架进行实时计算,所以都拥有非常好的计算性能。经过测试,Flink 计算性能上略好。特点:批处理、流处理、SQL 高层 API 支持,自带 DAG,流式计算性能更高、可靠性更高。
2. Flink发展历程
2008,柏林理工大学一个研究性项目Stratosphere,Next Generation Big Data Analytics Platform(目标是建立下一代大数据分析引擎);
2014-04-16,Stratosphere成为Apache孵化项目,从Stratosphere 0.6开始,正式更名为Flink。由Java语言编写;
2014-08-26,Flink 0.6发布;
2014-11-04,Flink 0.7.0发布,介绍了最重要的特性:Streaming API;
2016-03-08,Flink 1.0.0,支持Scala;
2016-08-08,Flink 1.1.0;
2017-02-06,Flink 1.2.0;
2017-11-29,Flink 1.4.0;
2018-05-25,Flink 1.5.0;
2018-08-08,Flink 1.6.0;
2018-11-30,Flink 1.7.0;
2019-02-15,Flink 1.7.2;
2019-04-09,Flink 1.8.0;
2019-07-10,Flink 1.8.1;
2019-09-12,Flink 1.8.2;
2019-08-22,Flink 1.9.0;
2019-10-18,Flink 1.9.1;
2020-02-11,Flink 1.10.0;
2020-05-08,Flink 1.10.1-rc3;
2019年初,阿里收购flink产品所属公;不久必然会升级到2.x。
3. 阿里与Flink
- 起源:脱胎于双十一实时大屏业务实时计算 Flink脱胎于阿里巴巴集团内部双十一实时大屏业务,在阿里巴巴集团内部从最开始支持双十一大屏展现和部分实时报表业务的实时数据业务团队,历经多年的长期摸索和发展,到最终成长一个独立稳定的云计算产品团队。实时计算 Flink期望将阿里巴巴集团本身沉淀多年的实时计算产品、架构、业务能够以云产品的方式对外提供服务,助力更多中小企业实时化自身大数据业务。
- 萌芽阶段:开源Flink作为基础最初阿里巴巴集团支撑双十一大屏等业务同样采用的是开源的Flink作为基础系统支持,并在上面开发相关Flink代码。这个时期的实时业务处于萌芽阶段,规模尚小。数据开发人员使用Flink原生API开发流式作业,开发门槛高,系统调试难,存在大量重复的人力工作。
- 发展阶段:基于Flink的API开发阿里巴巴集团的工程师针对这类大量重复工作,开始考虑进行业务封装和抽象。工程师们基于Flink的API开发出大量可复用的数据统计组件。例如,实现了简单过滤、聚合、窗口等等作为基础的编程组件,并基于这类组件提供了一套XML语义的业务描述语言。基于这套设计,流式计算用户可以使用XML语言将不同的组件进行拼装描述,最终完成一整套完整的实时计算处理流程。基于XML+Flink组件的编程方式,从底层上避免了用户大量的重复开发工作,同时亦降低了部分使用门槛。但我们的数据分析人员仍然需要熟悉整套编程组件和XML描述语法,这套编程方式离分析人员最熟悉的SQL方式仍然差距甚远。
- 现阶段:Flink SQL开发完成任何技术的发展一定遵循 小众/创新 到 大众/普及 的成长轨迹。而从小众到大众,从创新到普及的转折点,一定在于技术的功能成熟和成本降低。阿里巴巴工程师开始思考如何更大程度``降低数据分析产品门槛,从而普及到更多的用户。得益于用户群对关系型数据库几十年的沉淀。阿里工程师最终开发一套Flink SQL替换了原有的XML+组件的编程方式,使用经典的SQL模式去计算和处理数据。这套系统成为今天实时计算 Flink的核心计算引擎(Flink)。当前这套系统以单机群数千台机器规模,在阿里巴巴集团内部服务20+BU。日均消息处理数千亿级,流量近PB级别,成为阿里巴巴集团最核心的流式计算集群。Flink SQL的优势
- 可以对标SQL功能。从而提高开发人员的技术成熟度。
- 可以利用用户熟悉的SQL模型。可极大降低用户上手使用实时计算的门槛。
当前实时计算 Flink在原有Flink系统基础上,更加丰富和提升了用户的使用体验。包括提供一整套的开发平台,完整的流式数据处理业务流程。使用实时计算 Flink,受益于阿里大数据多年的技术和业务沉淀,您可以完全享受到阿里巴巴集团最新最前沿的计算引擎能力,业务上可规避阿里巴巴集团多年在流式大数据的试错和教训,让您可以更快、更轻松地实时化大数据处理流程,助力业务发展。
