实时流Streaming大数据:Storm,Spark和Samza
当前有许多分布式计算系统能够实时处理大数据,这篇文章是对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 SQL, MLlib, GraphX几个库包实现,这些提供方便的统一的编程模型,特别是流算法如流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的更多相关文章
- 【互动问答分享】第8期决胜云计算大数据时代Spark亚太研究院公益大讲堂
“决胜云计算大数据时代” Spark亚太研究院100期公益大讲堂 [第8期互动问答分享] Q1:spark线上用什么版本好? 建议从最低使用的Spark 1.0.0版本,Spark在1.0.0开始核心 ...
- 流式大数据计算实践(1)----Hadoop单机模式
一.前言 1.从今天开始进行流式大数据计算的实践之路,需要完成一个车辆实时热力图 2.技术选型:HBase作为数据仓库,Storm作为流式计算框架,ECharts作为热力图的展示 3.计划使用两台虚拟 ...
- 【互动问答分享】第13期决胜云计算大数据时代Spark亚太研究院公益大讲堂
“决胜云计算大数据时代” Spark亚太研究院100期公益大讲堂 [第13期互动问答分享] Q1:tachyon+spark框架现在有很多大公司在使用吧? Yahoo!已经在长期大规模使用: 国内也有 ...
- 【互动问答分享】第6期决胜云计算大数据时代Spark亚太研究院公益大讲堂
“决胜云计算大数据时代” Spark亚太研究院100期公益大讲堂 [第6期互动问答分享] Q1:spark streaming 可以不同数据流 join吗? Spark Streaming不同的数据流 ...
- 【互动问答分享】第15期决胜云计算大数据时代Spark亚太研究院公益大讲堂
"决胜云计算大数据时代" Spark亚太研究院100期公益大讲堂 [第15期互动问答分享] Q1:AppClient和worker.master之间的关系是什么? AppClien ...
- 【互动问答分享】第10期决胜云计算大数据时代Spark亚太研究院公益大讲堂
“决胜云计算大数据时代” Spark亚太研究院100期公益大讲堂 [第10期互动问答分享] Q1:Spark on Yarn的运行方式是什么? Spark on Yarn的运行方式有两种:Client ...
- 【互动问答分享】第7期决胜云计算大数据时代Spark亚太研究院公益大讲堂
“决胜云计算大数据时代” Spark亚太研究院100期公益大讲堂 [第7期互动问答分享] Q1:Spark中的RDD到底是什么? RDD是Spark的核心抽象,可以把RDD看做“分布式函数编程语言”. ...
- 【大数据】Spark基础解析
第1章 Spark概述 1.1 什么是Spark 1.2 Spark内置模块 Spark Core:实现了Spark的基本功能,包含任务调度.内存管理.错误恢复.与存储系统交互等模块.Spark Co ...
- 大数据(13) - Spark的安装部署与简单使用
一 .Spark概述 官网:http://spark.apache.org 1. 什么是spark Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校 ...
随机推荐
- go语言interface学习
Go 中的 interface 所具有的最基本的功能:作为一种 abstract type,实现各种 concrete type 的行为统一. interface是一种类型.只有是实例化后才能调用in ...
- Docker部署code-server
Docker部署code-server 版本:codercom/code-server:v2 code-server可以放在服务器上,随时随地在浏览器中,编写代码.运行.调试: 手机,pad都可以进行 ...
- 【2018-01-26】SqlServer 检查死锁和阻塞
利用sys.sysprocesses SQL进程检查是否出现死锁和阻塞 Sys.SysProcesses 系统表是一个很重要的系统视图,主要用来定位与解决Sql Server的阻塞和死锁 select ...
- SQL ISNULL 参数
SQL Server 中有两个参数,语法: ISNULL(check_expression, replacement_value) check_expression 与 replacement ...
- Git学习笔记08-远程仓库
因为想在家里和公司都能用到一套代码,所以选择上传到github,记录一下使用经验. 需要安装git,和注册github 以下操作是第一次将自己的代码上传到GitHub上 1)创建github项目 1. ...
- 正则的lastIndex 属性
简介:正则的lastIndex 属性用于规定下次匹配的起始位置. 注意: 该属性只有设置标志 g 才能使用. 上次匹配的结果是由方法 RegExp.exec() 和 RegExp.test() 找到的 ...
- 多线程锁:Mutex互斥体,Semaphore信号量,Monitor监视器,lock,原子操作InterLocked
Mutex类 “mutex”是术语“互相排斥(mutually exclusive)”的简写形式,也就是互斥量.互斥量跟临界区中提到的Monitor很相似,只有拥有互斥对象的线程才具有访问资源的权限, ...
- 第92题:反转链表II
一. 问题描述 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NUL ...
- mysql:用户自定义变量关联失效
自定义变量的属性和限制 使用自定义变量的查询,无法使用查询缓存. 不能在使用常量或者标识列的地方使用自定义变量,例如表名.列明和LIMIT子句中. 用户自定义变量的生命周期是在一个连接中有效,所以不能 ...
- 启动文件startup_stm32f40_41xxx.s
一.启动文件,startup_stm32f40x_41xx.s 1.定义 启动文件由汇编编写,是系统上电复位后第一执行的程序. Stack_Size EQU 0x00000400 // 栈的大小可以调 ...