flink,storm,spark三者的区别
flink,storm,spark 三者的区别
我相信有不少的⼯程师都有着这样的处境,在学flink之前很好奇flink,storm,spark的区别是什么,为什么现在很多企业都在往flink⽅向转它的优势是什么,为什么不适⽤storm,为什么不适⽤spark,在下⾯的内容中我会为⼤家解答。希望可以帮助⼤家,也希望⼤家看了之后可以提出⾃⼰宝贵建议。
有限数据集和⽆限数据集
1.有限数据集:数据⼤⼩有限(固定⼤⼩,⽐如固定的⽂件),⽤于批处理,这⼀类数据主要⽤于mr,hive,pig,spark等批计算引擎。
2.⽆限数据集:数据持续增长(属于⽆限⼤⼩,⽐如kafka中的⽇志数据,总是有新数据进⼊,并且不知道什么时候结束或者是永远不结束),⽤于流式处理,这⼀类数据主要⽤于storm,spark streaming,flink等⼀些流式计算引擎。
apache计算引擎的发展关系
在apche中的三篇论⽂鉴定⼤数据的基础其中mr收到其中⼀篇论⽂的启发创造了mapreduce,同时随着时代的发展也出现了其他的技术技术。
1.第⼀代计算引擎 mapreduce
mapreduce  作为第⼀个计算引擎,⽤于批处理,是计算引擎的先驱,内部⽀持机器学习但是现在机器学习库不在更新,并且mapreduce  编写⼗分的耗时,开发效率低,开发时间成本太⼤,所以很少有企业写mapreduce 来跑程序。
2.第⼆代计算引擎 pig/hive
作为第⼆代引擎pig/hive 对hadoop(如果不知道hadoop的话,建议不要看了。。。。。)进⾏了嵌套,其存储基于hdfs,计算基于
mr,hive/pig在处理任务时⾸先会把本⾝的代码解析为⼀个个m/r任务,这样就⼤⼤的降低了mr的编写编写成本。
pig 有⾃⼰的脚本语⾔属于,⽐hive更加的灵活
hive  属于类sql语法,虽然没有pig灵活,但是对于现在程序员都会sql的世界来说⼤家更喜欢使⽤hive
pig/hive 只⽀持批处理,且⽀持机器学习(hivemall)
3.第三代计算引擎 spark/storm
随着时代的发展,企业对数据实时处理的需求愈来愈⼤,所以就出现了storm/spark
这两者有着⾃⼰的计算模式
storm属于真正的流式处理,低延迟(ms级延迟),⾼吞吐,且每条数据都会触发计算。
spark属于批处理转化为流处理即将流式数据根据时间切分成⼩批次进⾏计算,对⽐与storm⽽⾔延迟会⾼于0.5s(s级延迟),但是性能
上的消耗低于storm。“流式计算是批次计算的特例(流式计算是拆分计算的结果)”
4.第四代计算引擎 flink
flink2015年出现在apache,后来⼜被阿⾥巴巴技术团队进⾏优化(这⾥我⾝为国⼈为之⾃豪)为blink,flink⽀持流式计算也⽀持的批次
处理。
flink为流式计算⽽⽣属于每⼀条数据触发计算,在性能的消耗低于storm,吞吐量⾼于storm,延时低于storm,并且⽐storm更加易于编hadoop与spark的区别与联系
写。因为storm如果要实现窗⼝需要⾃⼰编写逻辑,但是flink中有窗⼝⽅法。
flink内部⽀持多种函数,其中包括窗⼝函数和各种算⼦(这⼀点和spark很像,但是在性能和实时上spark是没有办法⽐较的)
flink⽀持仅⼀次语义保证数据不丢失
flink⽀持通过envent time来控制窗⼝时间,⽀持乱序时间和时间处理(这点我觉得很厉害)
对于批次处理flink的批处理可以理解为 “批次处理是流式处理的特例”(批次计算是流式计算的合并结果)
区别对⽐(总结)
这⾥⽤⼀张图来做第⼀点的简介
这⾥⽤⼀张图来做第⼀点的对⽐
相⽐于storm ,spark和flink两个都⽀持窗⼝和算⼦,减少了不少的编程时间
flink相⽐于storm和spark,flink⽀持乱序和延迟时间(在实际场景中,这个功能很⽜逼),个⼈觉得就
这个功能就可以锤爆spark
对于spark⽽⾔他的优势就是机器学习,如果我们的场景中对实时要求不⾼可以考虑spark,但是如果是要求很⾼就考虑使⽤flink,⽐如对⽤户异常消费进⾏监控,如果这个场景使⽤spark的话那么等到系统发现开始预警的时候(0.5s),罪犯已经完成了交易,可想⽽知在某些场景下flink的实时有多重要。