简介:
实时计算引擎相对于批处理计算引擎领域选择技术方案有很多,主流的方案包含有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 架构图:
Storm 架构图:
Flink 架构图:
参考:RangeYan