吞吐量高、容错能力强的实时流处理系统;
基本概念
DStream
- 把接收到的数据流按时间间隔(Batch Duration)划分成一个个的RDD(DStream,持续的离散化流),按先进先出(队列)的方式来处理;
- 对DStream的操作构建出依赖关系DAG(记录到DStreamGraph对象中,表示一个作业),待Streaming启动后、到达批处理时间时,才执行作业处理批次数据;
- 每个输出操作对应一个作业。
窗口间隔、滑动间隔
除了批处理间隔,对于窗口操作还有窗口间隔和滑动间隔:
- 窗口间隔:批处理数据个数由窗口间隔(即窗口持续时间)决定,默认比批处理间隔、滑动间隔大;
- 滑动间隔:表示发生一次窗口滑动经过的时间,默认和批处理间隔相同;
三种间隔示意图:
-----------------------------------------
| 1 | 2 | 3 | 4 | 5 |
-----------------------------------------
批处理间隔: |<- 1 ->|
|<- 1 ->|
窗口间隔: |<- 3 ->|
|<- 3 ->|
滑动间隔: |<- 2 ->|
- 滑动后,窗口会移除最左边“滑动间隔”个的数据;
- 新旧窗口有一个批处理间隔的数据重叠;
- 窗口间隔 = 批处理间隔 + 滑动间隔。
容错设计
检查点
阶段性把数据存储到HDFS等可靠的存储系统中,提供驱动器容错(驱动失败重启后从检查点恢复)及控制失败时重算的状态数量(控制DAG中需要回溯的位置)。
驱动器容错
驱动器程序初始化可先判断是否存在检查点,如存在则会从检查点目录初始化,但程序崩溃时自动重启驱动器进程的程序需要自行实现。
工作节点容错
与Spark Core一样,从外部数据源接收到的数据都在多个工作节点上备份,根据谱系图可以从幸存备份中重算缺失数据。
接收器容错
在别的节点上重启失败的接收器,但是否丢失取决于数据源是否会重发、获取数据的方式(pull、push),因此需要考虑上游可靠性。
处理保证
基于容错保障,Streaming可为所有的转化操作提供“精确一次”执行的语义(幂等),但当输出到外部系统时,需要自行实现避免重复处理(如使用事务、设计幂等的更新操作)。
低延迟
最小的Batch Size可选取0.5~2s(Storm为100ms),能满足准实时需求。
高吞吐量
Spark节点支持线性扩展,可在短时间内(数秒)处理大规模数据(xGB/s),比Storm高2~5倍。
运行架构
- 功能主要包括流处理引擎的数据流接收和存储,以及批处理作业的生成和管理;
- 分为Driver端(ReceiverTracker、JobGenerator)和Client端(ReceiverSupervisor、Receiver);
- 流程包括:启动流处理引擎、接收及存储数据流、处理数据流、输出处理结果。
网友评论