随着时代的发展,企业对数据实时处理的需求愈来愈大,所以就出现了storm/spark流框架。这两者有着自己的计算模式:

  • storm属于真正的流式处理,低延迟(ms级延迟),高吞吐,且每条数据都会触发计算。
  • spark属于批处理转化为流处理即将流式数据根据时间切分成小批次进行计算,对比与storm而言延迟会高于0.5s(s级延迟),但是性能上的消耗低于storm。“流式计算是批次计算的特例(流式计算是拆分计算的结果)”

2015年flink出现了,后来又被阿里巴巴技术团队进行优化为blink,flink支持流式计算也支持的批次处理。

  • flink为流式计算而生属于每一条数据触发计算,在性能的消耗低于storm,吞吐量高于storm,延时低于storm,并且比storm更加易于编写。因为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的实时有多重要。

标签: none

添加新评论