快速大数据:Apache Flink与Apache Spark处理流式数据比较
Posted 小象
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速大数据:Apache Flink与Apache Spark处理流式数据比较相关的知识,希望对你有一定的参考价值。
原文链接:http://www.kdnuggets.com/2015/11/fast-big-data-apache-flink-spark-streaming.html
实时流处理最近发展势头强劲,目前能实现流处理的主要工具有Apache Spark和Apache Flink。我们将通过案例分析来学习如何使用这些工具进行数据处理、数据流及数据管理。
更快速的数据处理需求正日益增长,实时流数据处理似乎能够满足这一要求。Apache Spark被大量的公司用于大数据处理的同时,Apache Flink作为后起之秀正在赶超,大有替代Apache Spark之势。事实上,很多人都认为Apache Flink有替代Apache Spark的潜力,因为Flink在处理实时流数据方面的能力显著。当然,Apache Flink就其应用场景来讲要替代Spark仍然有很长的路要走,因为Flink目前还处于广泛测试阶段,但实时处理和低数据延迟是Apache Flink的核心特性。与此同时,需要考虑到Apache Spark可能并不会失宠因为其批处理能力仍然有重大意义。
对基于批处理的所有是非曲直,似乎有很强的案例来支持实时流数据处理。流数据处理使得快速构建和加载数据仓库成为可能,具备低延迟的流处理器能够让你具备快速的数据洞察力,如此你便有更多的时间去查找可能存在的问题。除能够更快速的处理,还有另外一个非常重要的优点:你具备更多的时间去设计一个合适的事件应对机制。拿异常检测作为案例,低延迟和快速检测使你能够提前确定一个最佳对策以防止可能带来的危害,典型的应用如某个安全要求较高的网络中的欺诈性攻击检测、工业设备损伤检测等,如此便可以避免带来的巨大危害。
Apache Flink为一个大数据处理工具,它能够在大规模分布式系统中快速地处理大数据,并以低延迟性和高容错性著称,其核心特性是能够实时地处理流数据。Apache Flink起源于学术开源项目,那时它的名字还是Stratosphere,后来它成为Apache 软件基金会孵化器的一部分,为避免与其它项目名称命名冲突,最终更名为Flink。Flink这个名称很合适因为它具有敏捷的意思,至于选择松鼠作为其logo也很合适,因为松鼠具有敏捷、聪明和反应迅速这些优点。
自从Apache Flink加入到Apache 软件基金会,在近八个月的时间内,作为大数据处理工作其发展非常迅速,已经受到非常广泛的关注。人们对Flink的兴趣增长可以从2015年参加相关会议的人数得到验证,2015年5月在伦敦举办的Strata 会议及2015年7月在San Jose举办的Hadoop峰会上,有很多人参加了关于Flink的会议。2015年8月总部在San Jose的MapR公司举办的旧金山湾区Apache Flink meet-up,当时有超过60人参加。
下图给出了Flink的lambda架构
虽然Spark和Flink有几分相似,例如它们的API、组件等,但这些相似性对数据处理并没有太大的影响。下面将给出Flink和Spark间的比较。
在流数据处理方面,Spark数据处理采用的是分批处理模式而Flink采用的是实时处理模式。Spark处理由数据块构成的RDD 而Flink能够实时处理一行又一行的数据。因此,无论进行何种设置,Spark总是会存在一定的数据迟延,而Flink不会有这种情况。
Spark支持数据分批迭代而Flink通过使用其流框架直接进行数据的迭代,下图演示了Flink如何进行迭代处理。
Flink能够自动地适应不同的数据集而Spark需要手动优化和调整其作业以适配不同的数据集。Spark需要手动进行分区和缓存操作,因此在处理过程中不可避免地会有些延迟。
Flink在数据处理过程中可以随时提供中间结果,而Spark遵循的是一个过程式程序设计系统,Flink使用的则是分布式数据流方法,因此无论何时需要中间结果,Flink都可以使用广播变量将预先计算好的结果分发到各worker节点上。
Flink提供了提交和执行所有作业的接口。Spark和Flink都可以集成Apache Zeppelin,以支持数据导入(data ingestion)、数据分析(data analytics)、数据发现(data discovery)及数据协作和数据可视化。Apache Zepplin同时也提供了多语言支持以便提交和执行不同语言编写的Flink程序。
后面的这几段内容给出了Flink和Spark在处理不同作业时的时间消耗比较。为公平比较起见,Flink和Spark运行资源都是一样的,相关机器规格及节点匹配如下图:
如上图所示,图像中标红的部分给出了运行Flink的处理器机器规格同时也给出了运行Spark的处理器机器规格。
上图中红色标红区域分别给了出了运行Flink和Spark的处理器对应节点配置Flink处理速度更快,因此它的流水线执行方式,同样的数据Spark花费了2171秒而Flink只花费了1490秒。
当在不同大小的数据集上运行TeraSort算法时,其结果如下:
· 对于10GB的数据,Flink时间消耗是157秒而Spark是387秒
· 对于160GB的数据,Flink时间消耗是3127秒而Spark是4927秒
批数据处理或流数据处理,哪个更好?Flink和Spark都各具优势并适用于不同场景,虽然很多人都声称基于批处理的工具将过时,但至少目前来讲还不会。为理解它们的相关优势,我们来看下表给出的比较:
流处理(Streaming) |
批处理(Batching) |
数据或输入以某种记录格式按特定顺序到达 |
数据或输入按记录数或时间被分成多批 |
随时需要进行数据输出,但不会早于需要确认序列的时间 |
输入按需给定但部分批次数据将保留 |
输出在写完后不需要修改 |
所有输出行的新状态和详细情况将被记录 |
同样能够进行数据批量处理 |
不能进行数据批处理 |
Flink和批处理工具在某些应用场景中都是可用的,拿隔天计算滚动月销售情况来说,在这种场景当中,需要做的是计算每天的销售汇总数据然后再进行累加求和。这种场景中,需要的可能并不是流数据处理,数据批处理工具能够按日期处理各批次销售数据并将其累加。此种场景即使有数据延迟,延迟的数据在后期始终还是会被添加进来以对数据结果进行修正。
虽然对于批数据处理Spark有很多的优点,也满足很多的应用场景,但似乎Flink在商业应用方面的吸引力更大,这缘于Flink也能够进行批数据处理。当然,还需要进一步说明Flink的批处理能力可能与Spark并不具有可比性,Spark仍然有时间来解决这一问题。
更多精彩内容,请点击"阅读原文"
以上是关于快速大数据:Apache Flink与Apache Spark处理流式数据比较的主要内容,如果未能解决你的问题,请参考以下文章
Flink从入门到精通100篇(二十三)-基于Apache Flink的爱奇艺实时计算平台建设实践
Flink从入门到精通100篇(二十三)-Apache Flink在滴滴的应用与实践
大数据分析引擎Apache Flink: What, How, Why, Who, Where?