Flink的核心概念是什么?

Flink 的核心概念主要包括:

  1. 流(Stream):由数据集合组成的数据序列,支持根据时间或位置排序。
  2. Environment:表示执行环境,用于配置和执行 Flink 应用。
  3. Source:数据源,用于将外部数据流读取到 Flink 流环境中。
  4. Sink:数据Sink,用于将 Flink 流写入到外部系统中。
  5. 转换(Transformation):对数据流进行转换、过滤、聚合等操作,并生成新的数据流。
  6. 数据流(DataStream):由 Source 读取的数据流,可以应用各种 Transformation 来生成新的数据流。
  7. 作业(Job):一系列 Transformation 操作和 Sink 操作的集合,会被编译成一个可执行的作业。
  8. 执行(Execution):将作业转换成物理执行计划,并将其提交到执行环境中执行。
  9. 状态(State):transformation操作期间的数据,用于在计算过程中存储和查询数据。

举例:

  1. 流:从传感器读入的温度数据流。
  2. Environment:通过 StreamExecutionEnvironment 对象配置和管理执行。
  3. Source:通过 env.readTextFile() 方法从文件中读取数据流。
  4. Sink:通过 env.writeAsText() 方法将数据写入文件。
  5. Transformation:通过 .filter() 和 .reduce() 方法过滤和聚合数据。
  6. DataStream:通过 Source 读取的原始数据流和 Transformation 生成的新数据流。
  7. Job:通过 env.execute() 方法执行的一系列 Transformation 和 Sink 操作。
  8. Execution:Job 被 StreamExecutionEnvironment 转换成执行计划后提交执行。
  9. 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 作业和执行的概况。