Flink 的数据结构是其区别于其他批处理和流处理框架(如 Spark)的核心之一。其设计哲学是 “有状态的流处理” ,即流处理是基础,批处理是流处理的一种特例。因此,它的数据结构也紧密围绕这一思想构建。
Flink 的数据结构主要可以分为两大类:
- 用于编程 API 的数据结构:即用户编写程序时直接操作的数据形式。
- 用于内部执行引擎的数据结构:即 Flink 运行时在内部处理和交换数据时使用的格式。
一、编程 API 数据结构
这是开发者最常接触的部分,主要分为两种:
1. DataStream / DataSet (已在 Flink 1.12 后统一为 DataStream API)
虽然现在官方推荐使用统一的 DataStream API 进行批流一体编程,但理解两者的区别有助于理解 Flink 的演进。
-
DataStream:
- 含义:代表一个无界的数据流。数据元素会持续不断地产生和流入。
- 来源:例如 Kafka、Kinesis、TCP Socket、实时日志文件等。
- 操作:应用于其上的转换(如
map,filter,keyBy,window)通常是持续进行的。 - 特点:处理永不停止(除非手动取消),结果会持续增量产出。
-
DataSet:
- 含义:代表一个有界的数据集合。所有要处理的数据在开始处理前就已经是已知且完整的。
- 来源:例如 HDFS、本地文件系统中的文件、数据库等。
- 操作:应用于其上的转换会生成一个执行计划,最终一次性计算出结果。
- 特点:处理有明确的开始和结束,最终产出完整结果。

最低0.47元/天 解锁文章
753

被折叠的 条评论
为什么被折叠?



