请解释 Apache Flink 中的 DataStream 和 DataSet 分别代表什么,并说明它们之间的核心差异有哪些?
考察说明
考查对 Flink 两种核心编程抽象的理解及其适用场景的区分。
回答思路
- 【回答框架 1】DataStream 是 Flink 用于处理无界数据流的抽象,基于流处理模型,数据按事件时间或处理时间持续到达,支持事件驱动、窗口操作和实时计算。
- 【回答框架 2】DataSet 是 Flink 用于处理有界数据集的抽象,基于批处理模型,数据一次性加载,适合离线分析,支持高效的批量迭代和排序。
- 【回答框架 3】主要区别在于数据的有界性、处理模型、容错机制和适用场景:DataStream 面向实时流,使用持续检查点;DataSet 面向静态批,使用批式恢复。
- 【回答框架 4】在 Flink 1.12 之后,DataSet 逐渐被 DataStream 统一,批处理可通过 DataStream 的执行模式实现,但概念上两者仍有区别。
- 【关键点 1】DataStream 处理无界流,DataSet 处理有界批。
- 【关键点 2】DataStream 基于流处理,DataSet 基于批处理。
- 【关键点 3】两者在容错和调度上不同,流用检查点,批用恢复。
- 【关键点 4】Flink 新版本中 DataSet 被 DataStream 统一。
- 【易错点 1】不要混淆 DataStream 和 DataSet 的适用场景,实时需求用流,离线用批。
- 【易错点 2】避免认为 DataSet 已完全废弃,在旧版本中仍存在。
- 【易错点 3】注意 Flink 版本差异,新特性可能改变两者关系。