这是我参与「第四届青训营 」笔记创作活动的第6天。
第二节课「流/批/OLAP 一体的 Flink 引擎」的内容主要包含 4 个方面:Flink 概述、Flink 整体架构、Flink 架构优化、案例讲解。这篇文章为 Flink 概述的相关内容。
流式计算引擎发展历史
-
Storm
- Storm API 的 low-level 以及开发效率低下
- 一致性问题:Storm 更多考虑到实时流计算的处理时延而非数据的一致性保证
-
Spark Streaming
- Spark Streaming 相比于 Storm 的低阶 API 以及无法正确性语义保证,Spark 是流处理的分水岭:第一个广泛使用的大规模流处理引擎,既提供较为高阶的 API 抽象,同时提供流式处理正确性保证
-
Flink
从产品技术来看,Flink 作为一个最新的实时计算引擎,具备如下流计算技术特征:
- 完全一次保证:故障后应正确恢复有状态运算符中的状态
- 低延迟:越低越好。许多应用程序需要亚秒级延迟
- 高吞吐量:随着数据速率的增长,通过管道推送大量数据至关重要
- 强大的计算模型:框架应该提供一种编程模型,该模型不限制用户并允许各种各样的应用程序在没有故障的情况下,容错机制的开销很低
- 流量控制:来自慢速算子的反压应该由系统和数据源自然吸收,以避免因消费者缓慢而导致崩溃或降低性能
- 乱序数据的支持:支持由于其他原因导致的数据乱序达到、延迟到达后,计算出正确的结果
- 完备的流式语义:支持窗口等现代流式处理语义抽象
- Google Dataflow Model 的开源引擎实现
主要的流式计算引擎能力对比
| Storm | Spark Streaming | Flink | |
|---|---|---|---|
| Streaming Model | Native | mini-batch | Native |
| 一致性保证 | At Least/Most Once | Exactly-Once | Exactly-Once |
| 延迟 | 低延迟(毫秒级) | 延迟较高(秒级) | 低延迟(毫秒级) |
| 吞吐 | Low | High | High |
| 容错 | ACK | RDD Based Checkpoint | Checkpoint (Chandy-Lamport) |
| StateFul | No | Yes (DStream) | Yes (Operator) |
| SQL支持 | No | Yes | Yes |
Flink 开源生态
Apache Flink 在开源生态上的能力比较强大,可以支持:
- 流批一体:支持流式计算和批式计算
- OLAP:Flink 可以支持 OLAP 这种短查询场景
- Flink ML:pyFlink、ALink、AIFlow 等生态支持 Flink 在 ML 场景的应用
- Gelly:图计算
- Stateful Function:支持有状态的 FAAS 场景
个人总结
了解了流式计算引擎的发展历史、主要的流式计算引擎能力对比和 Flink 开源生态。