Storm 与 Spark Streming对比分析

版权声明:本博客都是作者10多年工作总结 https://blog.csdn.net/Peter_Changyb/article/details/81974772
  • 实现和编程 API 

Storm 主要是由 Clojure 语言实现,Spark Streaming 是由 Scala 实现。如果你想看看这两个框架是如何实现的或者你想自定义一些东西你就得记住这一点。Storm 是由 BackType 和Twitter 开发,而 Spark Streaming 是在 UC Berkeley 开发的。Storm 提供了 Java API,同时也支持其他语言的 API。 Spark Streaming 支持 Scala 和 Java 语言(其实也支持 Python)。

  • 批处理框架集成 

Spark Streaming 的一个很棒的特性就是它是在 Spark 框架上运行的。这样你就可以想使用其他批处理代码一样来写 Spark Streaming 程序,或者是在 Spark 中交互查询。这就减少了单独编写流批量处理程序和历史数据处理程序。

  • 生产支持 

Storm 已经出现好多年了,而且自从 2011 年开始就在 Twitter 内部生产环境中使用,还有其他一些公司。而 Spark Streaming 是一个新的项目,并且在 2013 年仅仅被 Sharethrough 使用。Storm 是 Hortonworks Hadoop 数据平台中流处理的解决方案,而Spark Streaming 出现在 MapR 的分布式平台和 Cloudera 的企业数据平台中。除此之外,Databricks 是为 Spark 提供技术支持的公司,包括了Spark Streaming。虽然说两者都可以在各自的集群框架中运行,但是 Storm 可以在Mesos 上运行, 而 Spark Streaming 可以在 YARN 和 Mesos 上运行。

  • 处理模型以及延迟 

虽然两框架都提供了可扩展性(scalability)和可容错性(fault tolerance),但是它们的处理模型从根本上说是不一样的。Storm 可以实
现亚秒级时延的处理,而每次只处理一条 event,而 Spark Streaming 可以在一个短暂的时间窗口里面处理多条(batches)Event。所以说 Storm 可以实现亚秒级时延的处理,而 Spark Streaming 则有一定的时延。

  • 容错和数据保证 

Spark Streaming 的容错为有状态的计算提供了更好的支持。在 Storm 中,每条记录在系统的移动过程中都需要被标记跟踪,所以Storm 只能保证每条记录最少被处理一次,但是允许从错误状态恢复时被处理多次。这就意味着可变更的状态可能被更新两次从而导致结果不正确。任一方面,Spark Streaming 仅仅需要在批处理级别对记录进行追踪,所以他能保证每个批处理记录仅仅被处理一次,即使是 node 节点挂掉。虽然说 Storm 的 Trident library 可以保证一条记录被处理一次,但是它依赖于事务更新状态,而这个过程是很慢的,并且需要由用户去实现。

猜你喜欢

转载自blog.csdn.net/Peter_Changyb/article/details/81974772