Flink 的核心概念主要包括:
- 流(Stream):由数据集合组成的数据序列,支持根据时间或位置排序。
- Environment:表示执行环境,用于配置和执行 Flink 应用。
- Source:数据源,用于将外部数据流读取到 Flink 流环境中。
- Sink:数据Sink,用于将 Flink 流写入到外部系统中。
- 转换(Transformation):对数据流进行转换、过滤、聚合等操作,并生成新的数据流。
- 数据流(DataStream):由 Source 读取的数据流,可以应用各种 Transformation 来生成新的数据流。
- 作业(Job):一系列 Transformation 操作和 Sink 操作的集合,会被编译成一个可执行的作业。
- 执行(Execution):将作业转换成物理执行计划,并将其提交到执行环境中执行。
- 状态(State):transformation操作期间的数据,用于在计算过程中存储和查询数据。
举例:
- 流:从传感器读入的温度数据流。
- Environment:通过 StreamExecutionEnvironment 对象配置和管理执行。
- Source:通过 env.readTextFile() 方法从文件中读取数据流。
- Sink:通过 env.writeAsText() 方法将数据写入文件。
- Transformation:通过 .filter() 和 .reduce() 方法过滤和聚合数据。
- DataStream:通过 Source 读取的原始数据流和 Transformation 生成的新数据流。
- Job:通过 env.execute() 方法执行的一系列 Transformation 和 Sink 操作。
- Execution:Job 被 StreamExecutionEnvironment 转换成执行计划后提交执行。
- State:reduce() 方法累加的温度总值就是一个状态。
例如一个简单的 Flink 作业:
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<SensorReading> dataStream = env.readTextFile("sensor-data");
DataStream<SensorReading> highTempStream = dataStream.filter(reading -> reading.temperature > 30);
DataStream<Integer> totalTempStream = highTempStream.reduce((a, b) -> a.temperature + b.temperature);
totalTempStream.writeAsText("result");
env.execute();
这个 Flink 程序定义了一个执行环境,从文件读取数据流,过滤高温数据,计算总温度,并将结果写入文件。这就是一个简单的 Flink 作业和执行的概况。