一、Spark Streaming概述
1.什么是Spark Streaming
SparkStreaming类似于ApacheStorm,用于流式数据的处理。根据官方文档介绍,Spark Streaming有高吞吐量和容错能力强等特点。SparkSteaming支持的数据输入源很多,例如Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等等。数据输入后可以用Spark的高度抽象源语如:map、reduce、join、window等进行运算。而结果也能保存在很多地方,如HDFS,数据库等。另外SparkStreaming也能和MLib(机器学习)以及Graphx完美融合。
和Spark基于RDD的概念很相似,SparkStreaming使用离散化流(discretized stream)作为抽象表示,叫做DStream。Dstream是随时间推移而收到的数据的序列。在内部,每个时间区间收到的数据都作为RDD存在,而DStream是由这些RDD所组成的序列,因此得名“离散化”。
DStream可以从各种输入源创建,比如Flume、Kafka或者HDFS。创建出来的DStream支持两种操作,一种是转化操作(transformation),会生成一个新的DStream,另一种是输出操作(outputoperation),可以把数据写入外部系统中。DStream提供了许多与RDD所支持的操作相类似的操作支持,还增加了与时间相关的新操作,比如滑动窗口。
2.底层抽象:
SparkCore:RDD; SparkSql:DataFrame、DataSet; SparkStreaming:DStream。
3.什么是DStream:
DStream是封装的一个时间批次内的多个RDD
SparkStreaming是以时间为驱动,达到时间批次再运行;Storm是以数据为驱动,来一条数据处理一条数据(吞吐量太低)。
4.SparkStreaming特点:
1.易用;
2.容错:
3.易整合到Spark体系:
5.Spark与Storm区别:
Apache | Flink | SparkSteaming | Storm |
架构 | 架构介于spark和storm之间,主从结构与sparkStreaming相似,DataFlow Grpah与storm相似,数据流可以被表示为一个有向图,每个顶点是一个定义的运算,每向边表示数据的流动 Native | 架构依赖Spark,主从模式,每个batch批次处理都依赖driver主,可以理解为时间维度上的spark DAG Micro-Batch | 主从模式,且依赖ZK,处理过程中对主的依赖不大 Native |
容错 | 基于Ghandy-Lamport distributed snapshots checkpoint机制 Medium | WAL及RDD血统机制 High(高) | Records Ack Medium(一般) |
处理模型与延时 | 单条时间处理 亚秒级低延时 | 一个事件窗口内的所有事件 秒级低延时 | 每次传入的一个事件 亚秒级低延时 |
吞吐量 | High | High | Low(低) |
数据处理保证 | Exactly once High | Exactly once(实现架用Chandy-Lamport算法,即marker-checkpoint) High | At least once(实现架用record-level acknowledgments),Trident可以支持storm提供exactly once语义 Medium |
高级API | Flink,栈中提供了很多高级API和满足不同场景的类库:机器学习、图分析、关系式数据处理 High | 能够很容易的对接Spark生态圈里面的组件,同时能够对接主流的消息传输组件及存储系统 High | 应用需要按照特定的storm定义的规模编写 Low |
易用性 | 支持SQL Streaming,Batch和Streaming采用统一编程框架 High | 支持SQL Streaming,Batch和Streaming采用统一编程框架 High | 不支持SQL Streaming Medium |
成熟性 | 新兴项目,处于发展阶段 Low | 已经发展一段时间 Medium | 相对较早的流系统,比较稳定 High |
社区活动度 | 212 contributor 上升阶段 Medium | 937 contributor High | 216 contributor,活跃比较稳定 Medium |
部署性 | 部署相对简单,只依赖JRE环境 Low | 部署相对简单,只依赖JRE环境 Low | 依赖JRE环境和ZK High |