实时流处理架构示意图

___
|Web|
|   |----------------> WebServer---------->Flume---->Kafka  
|app|             /var/log/access.log                  |
|___|                                                  |
													  \|/
                                                   Spark/Storm
												       |
												      \|/
							可视化展示 <----------RDBMS/NoSql

Spark和MapReduce对比

|
|-MapReduce特点|--1.仅支持Map和Reduce两种操作
|              |--2.处理效率低效。
|              |  a)Map中间结果写磁盘,Reduce写HDFS,多个MR之间通过HDFS交换数据; 任务调度和启动开销大;
|              |  b)无法充分利用内存
|              |  c)Map端和Reduce端均需要排序
|              |--3.不适合迭代计算(如机器学习、图计算等),交互式处理(数据挖掘) 和流式处理(点击日志分析)
|
|-Spark特点|--1.运行速度快(基于内存计算和引入DAG执行引擎);
|          |    如果数据由磁盘读取,速度是hadoop mapreduce的10倍以上,
|          |    如果数据从内存读取,速度是hadoop mapreduce的100倍以上。
|          |--2.易用性好,spark不仅支持scala编程呢个,还支持java和python编写。
|          |--3.通用性好
|          |--4.随处运行
|          
|-spark和mapreduce的比较|1.spark把中间数据放在内存中,迭代运算效率高。     
|                       |  mapreduce中的计算结果保存在磁盘上,
|                       |  而spark支持DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率。
|                       |
|                       |2.spark容错性高。
|                       |  引进了RDD,如果数据集一部分丢失,则可以重建。另外,在RDD计算时可以通过checkpoint来实现容错。
|                       |
|                       |3.spark更加通用。不像hadoop只提供map和reduce两种操作。
|                       |  spark提供的数据集操作类型有很多种,大致分为转换操作和行动操作。
|                       |  转换操作包括map,filter,flatmap,sample,groupbykey,reducebykey,union,join,cogroup,mapvalues,sort和partionby等多种操作类型,
|                       |  行动操作包括collect,reduce,lookup和save等操作类型。
|                       |  另外,各个处理节点之间的通信模型不再像Hadoop只有shuffle一种模式,用户可以命名,物化,控制中间结果的存储,分区等。

Spark(Streaming)和Storm对比

|
|_特性对比________________________________________________________
|          |      Stom              |   Spark                     |
|__________|________________________|_____________________________|
|计算模型  | 纯实时,来一条处理一条  |  准实时,对一个时间段内的数据|
|          |                        |  收集起来,作为一个RDD再处理 |
|          |                        |                             |
|计算延时  | 毫秒级                 |  秒级                       |
|          |                        |                             |
|吞吐量    | 低						|  高                         |
|          |                        |                             |
|事务机制  | 支持完善 				|  支持,但不够完善            |
|          |                        |                             |
|健壮性    | Zookeeper,Acker,非常强 |  Checkpoint,WAL,一般      |
|          |                        |                             |
|动态并行度| 支持   				|  不支持                     |
|__________|________________________|_____________________________|
|                                             
|-Storm适用场景|--1.需要纯实时,不能忍受1秒以上延迟的场景下使用,
|              |    比如实时金融系统,要求纯实时进行金融交易和分析       
|              |--2.对于实时计算的功能中,要求可靠的事务机制和可靠性机制,即数据的处理完全精准,
|              |    一条也不能多,一条也不能少,也可以考虑使用Storm
|              |--3.若还需要针对高峰低峰时间段,动态调整实时计算程序的并行度,
|              |    以最大限度利用集群资源(通常是在小型公司,集群资源紧张的情况),也可以考虑用Storm
|              |--4.如果一个大数据应用系统,它就是纯粹的实时计算,
|              |    不需要在中间执行SQL交互式查询、复杂的transformation算子等,那么用Storm是比较好的选择
|
|-Spark适用场景|--1.不要求纯实时,不要求强大可靠的事务机制,不要求动态调整并行度,
|              |    那么可以考虑使用Spark Streaming
|              |--2.如果一个项目除了实时计算之外,还包括了离线批处理、交互式查询等业务功能,
|              |    而且实时计算中,可能还会牵扯到高延迟批处理、交互式查询等功能,
|              |    那么就应该首选Spark生态,三者可以无缝整合
|              |                       |
|              |                       |---用Spark Core     开发离线批处理
|              |                       |---用Spark SQL      开发交互式查询
|              |                       |---用Spark Streaming开发实时计算
|              |--3.吞吐量要求很高的场景(但并不是所有实时计算场景下,都那么注重吞吐量)