实时流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年诞生于加州大学伯克利分校 ...
随机推荐
- 解决yum命令后出现libldap-2.4.so.2: cannot open shared object file
问题: [root@lgh ~]# yum There was a problem importing one of the Python modules required to run yum. T ...
- 异步网络编程aiohttp的使用
aiohttp的使用 aiohttp Asynchronous HTTP Client/Server for asyncio and Python. Supports both Client and ...
- 05 Windows编程——Windows程序框架
源码 #include<Windows.h> LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARA ...
- java_赋值与初始化
一.赋值(是给变量指定一个值或者是改变 一个变量的值) 变量类型 变量名=表达式 int i=10; 二.初始化 生成一个变量以后,必须通过明确的赋值语句进行初始化,然后在使用这个变量. 局部变量: ...
- winform中使用缓存
文章:Winform里面的缓存使用 另外一篇文章:缓存-MemoryCache Class
- c线程使用锁控制并发
// // Created by gxf on 2019/12/16. // #include <stdlib.h> #include <stdio.h> #include & ...
- gcc生成so文件
准备三个文件test.h, test.c, main.c test.h #include <stdio.h> void say_hello(); test.c #include " ...
- bcb ole拖拽功能的实现
最近项目中用到了OLE 拖拽功能 和BCB 一个Form的Drag 不同的是,只有实现了OLE 拖拽才能,从其他程序拖拽数据到Form 下面的代码实现了,同HTML网页拖拽到Form时,Form获得H ...
- MySql忘记密码了咋办
对内 忘记密码终端修改操作: #停止mysql服务 sudo /opt/lampp/lampp stopmysql #参数启动mysqld sudo /opt/lampp/sbin/mysqld -- ...
- 关于反编译pyc的一点技巧
现在最流行的是用 https://github.com/rocky/python-uncompyle6 但是有些python小版本不一样,比如2.7.6的某版本,开头的magic number在这个项 ...