Flink 中的数据流(DataStream)和数据集(DataSet)的主要区别在于:
数据类型:
- DataStream:用于处理无界的数据流。
- DataSet:用于处理有界的数据集。
执行方式:
- DataStream:以记录的形式持续不断地接收数据,采用真正的流式执行方式。
- DataSet:以数据集的形式获取全部数据,采用批处理的方式执行。
API:
- DataStream API:专注于流处理,提供了窗口、时间特征等相关操作。
- DataSet API:更加通用,可以用于流和批处理。
容错保证:
- DataStream:支持精确一次(exactly-once)的状态一致性保证。
- DataSet:只支持至少一次(at-least-once)的状态一致性保证。
例如:
- DataStream:从热感应器不断读取温度数据。
DataStream<SensorReading> dataStream = env.readTextFile("sensor-data");
- DataSet:从文件中读取历史温度数据集。
DataSet<SensorReading> dataSet = env.readTextFile("sensor-history");
- DataStream API:
dataStream.keyBy("id")
.timeWindow(Time.seconds(15))
.reduce( (a, b) -> a.temperature + b.temperature)
.print();
- DataSet API:
dataSet.groupBy("id")
.reduce( (a, b) -> a.temperature + b.temperature)
.print();
DataStream 和 DataSet 是 Flink 中两种主要的数据抽象,专注于流式数据和批量数据的处理。根据实际需要选择合适的 API 来开发 Flink 应用程序,可以发挥 Flink 的最大威力。理解二者的区别和适用场景,是熟练掌握 Flink 的基础。