实时计算框架对比
Apache Flink 是时下实时计算最火的框架,在实时场景下的运用灵活,还有官方对 SQL 支持,流批一体化的方向,此技术框架已经逐步在替代 storm、spark streaming 等实时计算框架所应用的场景。
Flink & Spark Streaming & Structured Streaming & Storm
先简单介绍一些各个流计算框架,时代发展及热度来看,Storm->Spark Streaming->Structured Streaming->Flink
Storm
Storm 是 Twitter 开源的分布式实时大数据处理框架,擅长处理海量数据,适用于数据实时处理而非批处理。
Topology 处理的最小的消息单位是一个 Tuple,也就是一个任意对象的数组。Storm 提交运行的程序称为 Topology。 Topology 由 Spout 和 Bolt 构成。Spout 是发出 Tuple 的结点。Bolt 可以随意订阅某个 Spout 或者 Bolt 发出的 Tuple。Spout 和 Bolt 都统称为 component。
编程模型:

Spark Streaming
SparkStreaming 是对于 Spark 核心 API 的拓展,从而支持对于实时数据流的可拓展,高吞吐量和容错性流处理。
SparkStreaming 提供 DStream 抽象,底层还是 RDD。它接收到的实时流数据,会按照照一定时间间隔将数据拆分成多个数据块,即 DStream 就是多个 RDD 组成的一个序列,所以 SparkStreaming 是以微批来模拟流,并不是一个纯实时的场景。
编程模型:

Structured Streaming
spark 在 2.0 版本中发布了新的流计算的 API,Structured Streaming/结构化流。 Structured Streaming 是一个基于 Spark SQL 引擎的可扩展、容错的流处理引擎。统一了流、批的编程模型,可以使用静态数据批处理一样的方式来编写流式计算操作。并且支持基于 event_time 的时间窗口的处理逻辑。
编程模型:

Flink
Apache Flink 是德国柏林工业大学的几个博士生和研究生从学校开始做起来的项目,早期叫做 Stratosphere。2014 年,StratoSphere 项目中的核心成员从学校出来开发了 Flink,同时将 Flink 计算的主流方向定位为流计算,并在同年将 Flink 捐赠 Apache,后来快速孵化成为 Apache 的顶级项目。现在 Flink 是业界公认的最好的大数据流计算引擎。
Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。


框架对比
| 项目/引擎 | Storm | Spark Streaming | Flink |
|---|---|---|---|
| API | 灵活的底层 API 和具有事务保证的 Trident API | 流 API 和 Structured-Streaming API 同时也可以使用更适合数据开发的 Spark SQL | 流 API 和更加适合数据开发的 Table API 和 Flink SQL 支持 |
| 容错机制 | ACK 机制 | State Checkpoint | State Checkpoint + Savepoint |
| 状态管理 | 无状态计算 | 有 UpdateStateByKey 等 API 进行带状态的变更 | Key State 和 Operator State 两种,State 支持多种持久化方案 |
| 处理模式 | 单条流式处理 | Mic batch 处理 | 单条流式处理 |
| 延迟 | 毫秒级 | 秒级 | 毫秒级 |
| 语义保证 | At Least Once,Exactly Once | At Least Once,Exactly Once | At Least Once,Exactly Once |
