请阐述 Apache Flink 中批处理与流处理在底层实现机制上的差异,并说明 Flink 是基于什么思想或架构来统一这两类计算模式的?
考察说明
考查对 Flink 底层执行模型的理解,以及批流统一的核心设计思想。
回答思路
- 【回答框架 1】底层实现差异:流处理以事件为最小单位,持续处理无界数据流,采用有状态流式执行,数据逐条或按微批处理,延迟低;批处理则以有限数据集为整体,通过优化器进行查询优化,采用批式调度,数据分块读取,吞吐高但延迟较高。
- 【回答框架 2】统一的核心思想:Flink 将批处理视为流处理的特殊情形,即无界流的有限部分。通过 DataStream API 和 DataSet API 的统一,使用统一的流式执行引擎,批处理作业也以有界流的方式执行,共享相同的运行时、状态管理、容错机制。
- 【回答框架 3】流处理执行模型:使用管道式数据传输,任务之间通过网络流式传输,支持事件时间处理和精确一次语义,使用检查点机制保证容错。
- 【回答框架 4】批处理执行模型:使用批量数据传输,任务间通过阶段式执行,利用优化器执行谓词下推、分区修剪等,基于文件系统或对象存储的源,通常使用阻塞式调度。
- 【回答框架 5】统一后的实现:DataStream API 支持有界流,批作业可以复用流式算子,但执行计划仍可进行批式优化,如调度策略、资源分配等,实现批流一体。
- 【关键点 1】流处理无界、持续,批处理有界、一次性。
- 【关键点 2】批处理是流处理的特殊情况,即有限流。
- 【关键点 3】统一基于流式执行引擎,共享状态和容错。
- 【关键点 4】批处理可进行批式优化,流处理延迟低。
- 【易错点 1】不要认为批流完全一样,它们在调度和优化策略上仍有差异。
- 【易错点 2】不能简单将流处理称为微批,Flink 原生流处理是逐条处理,微批只是其中一种模式。
- 【易错点 3】批流统一不意味着消除所有差异,而是统一执行引擎和编程模型。