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)

Storm适用于流式数据处理 流式数据处理框架_flink

 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发展历史

Storm适用于流式数据处理 流式数据处理框架_大数据_02

 

2008年,Flink 的前身已经是柏林理工大学一个研究性项目,原名 StratoSphere

2014年,Flink被Apache孵化器所接受然后迅速地成为了 ASF(Apache Software Foundation)的顶级项目之一。

最新版本已经到了1.15.0

4、Flink在阿里巴巴的应用

Storm适用于流式数据处理 流式数据处理框架_数据_03