当前有许多分布式计算系统能够实时处理大数据,这篇文章是对Apache的三个框架进行比较,试图提供一个快速的高屋建瓴地异同性总结。

Apache Storm

  在Storm中,你设计的实时计算图称为toplogy,将其以集群方式运行,其主节点会在工作节点之间分发代码并执行,在一个topology中,数据是在spout之间传递,它发射数据流作为不可变的key-value匹配集合,这种key-value配对值称为tuple,bolt是用来转换这些流如count计数或filter过滤等,bolt它们自己也可选择发射数据到其它流处理管道下游的bolt。

Apache Spark

  Spark Streaming是核心Spark的一个拓展,并不是像Storm一次处理流,而是将它们分成片段,变成小批量时间间隔处理,Spark抽象一个持续的数据流称为DStream(离散流),一个DStream是RDD(弹性分布式数据集的简称)的微批次 micro-batch,RDD是分布式集合能够并行地被任何函数操作,也可以通过一个滑动窗口的数据(窗口计算)进行变换。

Apache Samza

  Samza 的目标是将流作为接受到的消息处理,同时,Samza的流初始元素并不是一个tuple或一个DStream,而是一个消息,流被划分到分区,每个分区是一个只读消息的排序的序列,每个消息有一个唯一的ID(offset),系统也支持批处理,从同样的流分区以顺序消费几个消息,尽管Samza主要是依赖于Hadoop的Yarn和Apache Kafka,但是它的Execution & Streaming模块是可插拔的。

共同点

  这三个实时计算系统都是开源的,低延迟的,分布式的,可扩展的和容错的,他们都允许你在有错误恢复的集群中通过并行任务执行流处理代码,他们也提供简单的API抽象底层和复杂的实现。

这三个框架使用不同的词汇表达相似的概念:

不同点

不同点总结如下表:

有三个delivery模式:

  • At-most-once: 消息也许丢失,这通常是最不理想的结果。
  • At-least-once: 消息可以被退回(没有损失,但是会重复),这足够支持很多用例场景了。
  • Exactly-once: 每个消息只传递一次,也只有一次(不会丢失,无重复),这是一个理想功能,在所有情况下很难达到。

另外一个方面是状态管理,有许多不同的策略来存储状态,Spark Streaming写数据到分布式文件系统如HDFS,而Samza使用一个嵌入的key-value存储,Storm则或在应用层使用自己的状态管理,或使用一个高层次抽象称为:Trident.

使用场景

  所有这三个框架都特别适合处理连续的大量的实时数据,那么选择哪一个呢?并没有硬性规则,基本是通用的指南。

  如果你想要一个高速事件流处理系统,能够进行增量计算,那么Storm将非常适合,如果你还需要按需运行分布式计算,而客户端正在同步等待结果,那么你得在其外面使用分布式RPC(DRPC),最后但并非最不重要的是:因为Storm使用Apache Thrift,你能以任何语言编写拓扑topology,如果你需要状态持久或exactly-once传递,那么你应当看看高级别的Trident API,它也提供微批处理(micro-batching)

  使用Storm的公司有 Twitter, Yahoo!, Spotify, The Weather Channel...

  谈到微批处理,如果你必须有有态计算,exactly-once传递和不介意高延迟,你可以考虑Spark Streaming,特别如果计划实现图操作,机器学习或访问SQL,Apache Spark能让你通过结合Spark SQLMLlibGraphX几个库包实现,这些提供方便的统一的编程模型,特别是流算法如流k-means允许Spark实时进行决策。

  使用Spark有:Amazon, Yahoo!, NASA JPL, eBay Inc., Baidu

  如果你有大量的状态,比如每个分区有很多G字节,Samza协同存储和在同一机器处理的模型能让你有效处理状态,且不会塞满内存。这个框架提供灵活的可插拔API:它的默认execution 消息和存储引擎能够被你喜欢的选择替代,更有甚者,如果你有很多流处理过程,它们分别来自于不同的代码库不同的团队,Samza细粒度的工作特点将特别适合,因为它们能最小的影响来进行加入和移除。

  使用Samza公司有:LinkedIn, Intuit, Metamarkets, Quantiply, Fortscale…

http://www.jdon.com/bigdata/streaming-big-data-storm-spark.html

实时流Streaming大数据:Storm,Spark和Samza的更多相关文章

  1. 【互动问答分享】第8期决胜云计算大数据时代Spark亚太研究院公益大讲堂

    “决胜云计算大数据时代” Spark亚太研究院100期公益大讲堂 [第8期互动问答分享] Q1:spark线上用什么版本好? 建议从最低使用的Spark 1.0.0版本,Spark在1.0.0开始核心 ...

  2. 流式大数据计算实践(1)----Hadoop单机模式

    一.前言 1.从今天开始进行流式大数据计算的实践之路,需要完成一个车辆实时热力图 2.技术选型:HBase作为数据仓库,Storm作为流式计算框架,ECharts作为热力图的展示 3.计划使用两台虚拟 ...

  3. 【互动问答分享】第13期决胜云计算大数据时代Spark亚太研究院公益大讲堂

    “决胜云计算大数据时代” Spark亚太研究院100期公益大讲堂 [第13期互动问答分享] Q1:tachyon+spark框架现在有很多大公司在使用吧? Yahoo!已经在长期大规模使用: 国内也有 ...

  4. 【互动问答分享】第6期决胜云计算大数据时代Spark亚太研究院公益大讲堂

    “决胜云计算大数据时代” Spark亚太研究院100期公益大讲堂 [第6期互动问答分享] Q1:spark streaming 可以不同数据流 join吗? Spark Streaming不同的数据流 ...

  5. 【互动问答分享】第15期决胜云计算大数据时代Spark亚太研究院公益大讲堂

    "决胜云计算大数据时代" Spark亚太研究院100期公益大讲堂 [第15期互动问答分享] Q1:AppClient和worker.master之间的关系是什么? AppClien ...

  6. 【互动问答分享】第10期决胜云计算大数据时代Spark亚太研究院公益大讲堂

    “决胜云计算大数据时代” Spark亚太研究院100期公益大讲堂 [第10期互动问答分享] Q1:Spark on Yarn的运行方式是什么? Spark on Yarn的运行方式有两种:Client ...

  7. 【互动问答分享】第7期决胜云计算大数据时代Spark亚太研究院公益大讲堂

    “决胜云计算大数据时代” Spark亚太研究院100期公益大讲堂 [第7期互动问答分享] Q1:Spark中的RDD到底是什么? RDD是Spark的核心抽象,可以把RDD看做“分布式函数编程语言”. ...

  8. 【大数据】Spark基础解析

    第1章 Spark概述 1.1 什么是Spark 1.2 Spark内置模块 Spark Core:实现了Spark的基本功能,包含任务调度.内存管理.错误恢复.与存储系统交互等模块.Spark Co ...

  9. 大数据(13) - Spark的安装部署与简单使用

    一 .Spark概述 官网:http://spark.apache.org 1.        什么是spark Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校 ...

随机推荐

  1. 更改jupyter notebook的单元格宽度和主题颜色(theme)

    一.单元格宽度 这个命令: jt -t gruvboxl -f roboto -fs 12 -cellw 100% -T -N 它将宽度设置为100% 二.主题颜色 在用jupyter noteboo ...

  2. ASP.Net页面生存周期、Page_Load方法

    一.ASP.Net Web应用程序中的请求处理过程 二. http模块生命周期: 三.Asp.NET页面生命周期 1.阶段 阶段 说明 请求页面(Page Request) 严格地说,这个阶段不是页面 ...

  3. 6-修改虚拟机的SID(sysprep)

    一.注意点 1.这种错误一般会出现在克隆的机器里,导致在加入域的时候,报SID一致,加入失败,如下图: 2.使用sysprep修改完之后,需要重启服务器,并且重新配置,重新配网络: 3.如果修改SID ...

  4. Ellipsis对象

    Ellipsis对象. 写作 : ‘…’ 中文解释:省略 该对象bool测试是为真 用途: 1.用来省略代码,作用类似于pass的一种替代方案,这是python的’TBD’(未确定内容). def f ...

  5. Java8-Atomic

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util ...

  6. 2、细节&Class对象

    2.细节&Class对象 class Class{ 提供获取字节码文件中的内容. 比如: 名称,字段,构造函数,一般函数 } 该类就可以获取字节码文件中的所有内容,那么反射就是依靠该类完成的. ...

  7. 0、Spring 注解驱动开发

    0.Spring注解驱动开发 0.1 简介 <Spring注解驱动开发>是一套帮助我们深入了解Spring原理机制的教程: 现今SpringBoot.SpringCloud技术非常火热,作 ...

  8. 边学边体验django--模型

    步骤: 1.选定数据库,然后修改 settings.py 中的 DATABASES配置 实验过了sqlite3. 应该是这个样子的: 2. 创建app, 建立数据表模型. python manage. ...

  9. webservice的优缺点

    优点: 1.采用xml支持跨平台远程调用. 2.基于http的soap协议,可跨越防火墙 3.支持面向对象开发 4.有利于软件和数据的重用,实现松耦合. 缺点: 1.由于soap是基于xml传输,本身 ...

  10. 【线性代数】7-2:线性变化的矩阵(The Matrix of a Linear Transformation)

    title: [线性代数]7-2:线性变化的矩阵(The Matrix of a Linear Transformation) categories: Mathematic Linear Algebr ...