其他案例demo可以参考我的GitHub
编写一个Flink程序大致上可以分为以下几个步骤:
-
获得一个execution environment, env
val env = StreamExecutionEnvironment.getExecutionEnvironment
之后你可以设置以下配置
-
并行度(Parallelism):
- 设置作业的并行度,即操作符(operator)的并行实例数。这可以通过
env.setParallelism(int parallelism)
来设置。
- 设置作业的并行度,即操作符(operator)的并行实例数。这可以通过
-
执行模式(Execution Mode):
- Flink支持两种执行模式:本地执行(
LOCAL
)和集群执行(CLUSTER
)。虽然getExecutionEnvironment
默认可能根据你的环境选择执行模式,但在某些情况下你可能需要显式设置。不过,通常这不是通过StreamExecutionEnvironment
直接设置的,而是通过配置文件或命令行参数来控制的。
- Flink支持两种执行模式:本地执行(
-
时间特性(Time Characteristics):
- Flink支持处理时间(Processing Time)、事件时间(Event Time)和摄入时间(Ingestion Time)。你可以通过
env.setStreamTimeCharacteristic(TimeCharacteristic timeCharacteristic)
来设置时间特性。
- Flink支持处理时间(Processing Time)、事件时间(Event Time)和摄入时间(Ingestion Time)。你可以通过
-
状态后端(State Backend):
- 状态后端用于存储和管理Flink作业的状态。你可以通过
env.setStateBackend(StateBackend backend)
来设置状态后端。常见的状态后端包括FsStateBackend
(基于文件系统的状态后端)和RocksDBStateBackend
(基于RocksDB的状态后端)。
- 状态后端用于存储和管理Flink作业的状态。你可以通过
-
检查点(Checkpointing):
- Flink的容错机制依赖于检查点(Checkpointing)。你可以通过
env.enableCheckpointing(long interval)
来启用检查点,并通过一系列其他方法来配置检查点的具体行为,如setCheckpointingMode
、setCheckpointTimeout
等。
- Flink的容错机制依赖于检查点(Checkpointing)。你可以通过
-
重启策略(Restart Strategies):
- Flink允许你配置作业在遇到故障时的重启策略。你可以通过
env.setRestartStrategy
方法来设置重启策略,比如固定延迟重启、失败率重启等。
- Flink允许你配置作业在遇到故障时的重启策略。你可以通过
-
任务槽(Task Slots)和资源(Resources):
- 这些配置通常不是通过
StreamExecutionEnvironment
直接设置的,而是通过Flink的配置文件(如flink-conf.yaml
)或提交作业时的命令行参数来配置的。它们涉及到Flink集群的资源分配和任务调度。
- 这些配置通常不是通过
基于集合
通用方法
-
加载/创建初始数据, source
- 数据集包括但不限于以下这几种
-
基于文件
-
readTextFile(path)/ TextInputFormat
- 按行读取文件并将其作为字符串返回。 -
readTextFileWithValue(path)/ TextValueInputFormat
- 按行读取文件并将它们作为StringValues返回。StringValues是可变字符串。 -
readCsvFile(path)/ CsvInputFormat
- 解析逗号(或其他字符)分隔字段的文件。返回元组或POJO的DataSet。支持基本java类型及其Value对应作为字段类型。 -
readFileOfPrimitives(path, Class)/ PrimitiveInputFormat
- 解析新行(或其他字符序列)分隔的原始数据类型(如String或)的文件Integer。 -
readFileOfPrimitives(path, delimiter, Class)/ PrimitiveInputFormat
- 解析新行(或其他字符序列)分隔的原始数据类型的文件,例如String或Integer使用给定的分隔符。 -
readSequenceFile(Key, Value, path