1、Flink的介绍
随着数据的飞速发展,出现了很多热门的开源社区,比如:hadoop、spark、storm社区,他们都有各自专注的适用场景,比如hadoop主要是做数据的存储及批处理计算,spark既可以做批处理也可以做准实时计算,同时也支持机器学习和图计算,storm主要专注于实时计算。
在国外一些开源社区将flink分为四代:
hadoop:
主要是做批处理的,分为Map阶段和reduce阶段,如果业务非常复杂,会有多个map阶段和reduce阶段,因为两个阶段都有输入和输出,所以需要根据业务进行拆分阶段,同时mr的计算依赖的是io,所以性能比较低
使用DAG(Tez)+MR
通过引入DAG框架,将多个mr阶段串联到一起去执行,类似于我们之前学习的Oozie框架,因为使用的是第三方的DAG框架,相对于第一代来说,性能有了提高
Spark
spark可以做批计算、流计算、以及sql支持
spark自带了DAG,同时是基于内存的迭代计算,因此性能有了非常大的提高
问题?
为什么在企业中很多公司依然使用Mr进行离线计算?
主要是Mr的稳定性要远远的大于Spark,因为Mr是基于io的计算,基于io的计算相对来说稳定性比较高,虽然计算的比较慢
因为使用spark经常会出现oom(内存溢出),如果内存溢出任务执行失败
Flink
flink可以做批处理、流处理、sql支持
自带了DAG
flink相对于sparkstreaming来说,实时性更加准确,比较高,sparkstreaming本质上还是批处理,通过采用采样时间,每隔一定时间采样一次数据,本质上并没有达到非常高的实时要求
2、什么是FLink
flink可以做实时计算,也可以进行离线计算,同时支持sql语句
自带DAG引擎
flink也可以做机器学习、图计算、复杂事件处理(FlinkCEP)
Apache Flink® — Stateful Computations over Data Streams
即数据流上的有状态的计算。(在数据流上可以进行有状态的计算),数据流也就是流计算,即实时计算
有状态:每个算子的计算结果都是可以进行存储的,假如某个算子发生计算失败,可以将上次保存成功的state数据恢复过来,继续计算即可,不需要重新回溯到数据源端
- Data Streams ,Flink认为
有界数据集
是无界数据流
的一种特例,所以说有界数据集也是一种数据流,事件流也是一种数据流。Everything is streams
,即Flink可以用来处理任何的数据,可以支持批处理、流处理、AI、MachineLearning等等。 - Stateful Computations,即
有状态计算
。有状态计算是最近几年来越来越被用户需求的一个功能。比如说一个网站一天内访问UV数,那么这个UV数便为状态
。Flink提供了内置的对状态的一致性的处理,即如果任务发生了Failover,其状态不会丢失、不会被多算少算,同时提供了非常高的性能。
无界流
:意思很明显,只有开始没有结束。必须连续的处理无界流数据,也即是在事件注入之后立即要对其进行处理。不能等待数据到达了再去全部处理,因为数据是无界的并且永远不会结束数据注入。处理无界流数据往往要求事件注入的时候有一定的顺序性,例如可以以事件产生的顺序注入,这样会使得处理结果完整。
有界流
:也即是有明确的开始和结束的定义。有界流可以等待数据全部注入完成了再开始处理。注入的顺序不是必须的了,因为对于一个静态的数据集,我们是可以对其进行排序的。有界流的处理也可以称为批处理
。
其它特点:
- 性能优秀(尤其在流计算领域)
- 高可扩展性
- 支持容错
纯内存式
的计算引擎,做了内存管理方面的大量优化- 支持
eventtime
的处理 - 支持超大状态的Job(在阿里巴巴中作业的state大小超过TB的是非常常见的)
- 支持
exactly-once
的处理。
框架比较
框架选型:hadoop、spark、flink
首先,我们可以通过下面的性能测试初步了解两个框架的性能区别,它们都可以基于内存计算框架进行实时计算,所以都拥有非常好的计算性能。经过测试,Flink计算性能上略好。
测试环境:
1.CPU:7000个; 2.内存:单机128GB; 3.版本:Hadoop 2.3.0,Spark 1.4,Flink 0.9 4.数据:800MB,8GB,8TB; 5.算法:K-means:以空间中K个点为中心进行聚类,对最靠近它们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。 6.迭代:K=10,3组数据
spark和flink都是部署在hadoop的yarn环境上, 经过测试可以发现,flink的性能大于spark和hadoop的,主要原因是flink是基于内存的计算,flink是具有增量迭代的特性,同时具有对迭代自动优化的功能
3、Flink发展历史
2008年,Flink 的前身已经是柏林理工大学一个研究性项目,原名 StratoSphere
。
2014年,Flink被Apache孵化器
所接受然后迅速地成为了 ASF(Apache Software Foundation)
的顶级项目之一。
最新版本已经到了1.15.0
4、Flink在阿里巴巴的应用