简介:

实时计算引擎相对于批处理计算引擎领域选择技术方案有很多,主流的方案包含有Flink、Spark streamming、strom、Kafka、Pulsar、Beam、Gearpump、Edgent、Samza、阿里MaxCompute、Hadoop等等。

主流实时计算引擎总体对比:

技术

Spark Streaming

Storm

Flink

架构

依赖spark生态,主从模式,每个Batch处理都依赖主(driver),可以理解为时间维度上的spark DAG(有向五环图)。

主从模式,且依赖zookeeper,处理过程中对主的依赖不大。

架构介于spark streaming和storm之间,主从结构与spark streaming相似,DataFlow Grpah与Storm相似,数据流可以被表示为一个有向图。 每个顶点是一个用户定义的运算,每向边表示数据的流动。

容错

WAL及RDD 血统机制

Records ACK机制

基于Chandy-Lamport distributed snapshots checkpoint机制

延迟

处理的是一个事件窗口内的所有事件。具有秒级高延迟。

处理的是每次传入的一个事件可实现亚秒级低延迟。

同Strom,单条事件处理可实现亚秒级低延迟

吞吐量

一般

一般

最高

数据处理保证

exactly once(实现采用Chandy-Lamport 算法,即marker-checkpoint ),可靠性较高。

at least once(实现采用record-level acknowledgments),Trident可以支持storm 提供exactly once语义。可靠性一般。

exactly once,可靠性较高

成熟度与活跃度

已经发展了一段时间,相对稳定

已经发展了一段时间,相对稳定。

新兴项目,蓬勃发展中,社区活跃度一直在上升。

易用性

支持SQL Steaming,Batch和STREAMING采用统一编程框架。

不支持SQL Steaming

支持SQL Steaming,Batch和STREAMING采用统一编程框架。

适用场景

不是真正的实时流处理框架,有历史包袱,但是其使用起来很简单,且天然对接Spark生态栈中的其他组件,社区支持较大,吞吐量较大,部署也很简单,UI也做的更加智能。所以,如果对延迟要求不高的情况下,建议直接使用Spark Streaming 即可。

大体上同 Spark Streaming,但是具备亚秒级延迟,速度上可以和 Flink 媲美,比起 Spark Streaming,其对实时性支持更好一些。但是在各方面的性能表现上,比 Flink 较差。

完全为实时流处理而诞生,没有历史包袱。如果对延迟性要求比较高的话,那么建议直接上 Flink。除了延迟较低外,其在API和容错上也是做的比较完善,使用起来相对来说也是比较简单的,部署容易,而且发展势头也越来越好。

Spark Streaming 架构图:

flink和spark具有实时能力吗_spark


flink和spark具有实时能力吗_mapreduce_02


flink和spark具有实时能力吗_spark_03


flink和spark具有实时能力吗_mapreduce_04


Storm 架构图:

flink和spark具有实时能力吗_mapreduce_05


flink和spark具有实时能力吗_spark_06


Flink 架构图:

flink和spark具有实时能力吗_spark_07


flink和spark具有实时能力吗_spark_08


参考:RangeYan