Storm 和 Spark Streaming是构建与Hadoop之上的两款优秀的实时流式计算框架,他们各自的特点如何,究竟那款框架适用于你的业务需求?也许本文可以给你一个参考:
原文连接:http://xinhstechblog.blogspot.com/2014/06/storm-vs-spark-streaming-side-by-side.html
Storm vs. Spark Streaming: 横向对比
导言
Storm 和Spark Streaming两者皆是用于分布流式(数据)处理的开源框架。但是通过横向对比你将看到它们之间存在一些关键性区别。
处理模型,延迟
虽然两个框架都具有可扩展性和容错特性,但它们的处理模型有着本质区别。Storm会对每一次传入处理请求的事件做出响应,而Spark Streaming会对较短时间间隔内的所有请求批量提交来进行一次性处理。因此Storm在处理传入请求时延迟可缩短至次秒级,而Spark Streaming可能需要几秒钟的延迟。
容错,数据保证
二者在容错数据保证上做出了各自的权衡。Spark Streaming在容错方面提供了对状态计算的更好的支持。在Storm中,任一条单独的记录在经过系统时必须可以被追踪到,所以Storm仅保证所有记录都会至少处理一次,但是从错误中恢复过来时允许出现重复记录。这意味着可变状态有可能被错误的更新两次。
Spark Streaming在另一方面,仅需要在处理级别时才进行操作追踪,因此可以有效的保证每个小批量请求(mini-batch)都会被精确处理一次,即便某个节点发生了故障。(事实上,Storm的Trident library库同样提供了精准处理一次机制。但是它依赖于事物更新状态,这比较慢,而且通常是由用户去实现。)
|
Storm vs. Spark Streaming comparison. |
小结
简而言之,如果你需要次秒级延迟并且数据无丢失,Storm是一个不错的选择。如果你需要状态计算、每次传入请求精准处理一次,那么Spark Streaming更胜一筹。Spark Streaming程序设计逻辑也许会更易于理解,因为它近似于批处理程序(译者注:如Hadoop),尤其是在你使用批请求时(尽管是非常小的批次)。
实现,程序API
实现
Storm最初是由Clojure(译者注:一种并行编程语言,语法风格类似于Lisp)实现的, Spark Streaming则是由Scala(译者注:一种多范式编程语言,支持面向对象和函数式)。如果你想去阅读代码来看看系统如何工作的或者自己去定制一些东西,更要牢记它们的编程实现。Storm由BackType(译者注:媒体分析公司,已被Twitter收购)和Twitter联合开发的,Spark Streaming是UC Berkeley(译者注:加州大学伯克利分校)开发的。
程序API
Storm提供一套Java API,同时可以很好的支持其它编程语言。Spark Streaming可以用Scala开发,当然也支持Java。(译者注:Clojure和Scala两种语言均可供JVM调用)
批处理框架集成
Spark Streaming有一个好的特性是它运行在Spark上。因此你可以使用相同(或者非常近似)的代码去实现批处理操作,或者在Spark Streaming上对Spark进行交互查询。这会减少用于处理流数据和历史数据所需编写的代码。
|
Storm vs. Spark Streaming: implementation and programming API. |
小节
Spark Streaming的两个优势 (1)它不是用Clojure实现的(译者注:更具通用性)
(2)它可以很好的与Spark批处理计算框架集成
产品,支持
产品使用
Storm已经发布几年了,在Twitter上从2011年运行至今,现在也有很多其他公司在使用。相对的Spark Streaming是一个新项目,(据笔者所知的知名案例)仅在2013在Sharethrough(译者注:国外知名的广告视频网站)上投入生产使用。
Hadoop分发及支持
Storm(仅支持这一个)是Hortonworks Hadoop data platform数据平台的流式计算解决方案。而Spark Streaming同时支持MapR's distribution和Cloudera's Enterprise data platform两个Hadoop数据平台,并且还有Databricks(译者注:Databricks是一家创始团队背景显赫的大数据开发公司,专注于Hadoop和Spark)这样的重量级大数据公司提供支持。
集群管理集成
两套系统均可以运行在它们自己的集群上,Storm仍然只能运行于Mesos上,Spark Streaming在YARN和Mesos上均可以运行。(译者注:Storm也有一个可以运行在YARN上的第三方支持组件Storm on Yarn,但毕竟不是原生支持。)
|
Storm vs. Spark Streaming: production and support. |
小节
Storm的实际产品应用经验要比Spark Streaming久得多,但是Spark Streaming有两点优势:(1)作为开源产品有一个重量级公司给予支持和贡献技术力量;(2)原生适配YARN。