Storm风暴和Spark Streaming火花流都是分布式流处理的开源框架。这里将它们进行比较并指出它们的重要的区别。
处理模型,延迟
虽然这两个框架都提供可扩展性和容错性,它们根本的区别在于他们的处理模型。而Storm处理的是每次传入的一个事件,而Spark Streaming是处理某个时间段窗口内的事件流。所以,Storm处理一个事件能够达到秒内的延迟,而Spark Streaming则有几秒钟的延迟。
容错、数据保证
在容错数据保证方面的权衡是,Spark Streaming提供了更好的支持容错状态计算。在Storm中,每一个单独的记录当它经过系统时必须被跟踪,因此Storm可以至少保证每一个记录将被处理一次,可是在从错误中恢复过来时候容许出现重复记录。这意味着可变状态可能不正确地被更新两次。
另外一方面,Spark Streaming只须要在批级别进行跟踪处理,所以能够有效地保证每一个mini-batch将彻底被处理一次,即使一个节点发生故障。(实际上,Storm的 Trident library库也提供了彻底一次处理。可是,它依赖于事务更新状态,这比较慢,一般必须由用户实现。)
简而言之,若是你须要秒内的延迟,Storm是一个不错的选择,并且没有数据丢失。若是你须要有状态的计算,并且要彻底保证每一个事件只被处理一次,Spark Streaming则更好。Spark Streaming编程逻辑也可能更容易,由于它相似于批处理程序(Hadoop),特别是在你使用批次(尽管是很小的)时。
实现,编程api
Storm初次是由Clojure实现,而 Spark Streaming是使用Scala. 若是你想看看代码仍是让本身的定制时须要注意的地方,这样以便发现每一个系统是如何工做的。Storm是由BackType和Twitter开发; Spark Streaming是在加州大学伯克利分校开发的。
Storm 有一个Java API, 也支持其余语言,而Spark Streaming是以Scala编程,固然也支持Java
Spark Streaming一个好的特性是其运行在Spark上. 这样你可以你编写批处理的一样代码,这就不须要编写单独的代码来处理实时流数据和历史数据。html