Flink实战-Environment
Flink程序执行前,需要先获取执行环境,根据执行环境的不同,可分为ExecutionEnvironment和StreamExecutionEnvironment。

ExecutionEnvironment
用于批量数据处理的执行环境,通常用于需要处理大量静态数据的场景,如磁盘或内存中的数据集。
- createLocalEnvironment():创建一个新的本地执行环境,一般在开发过程中使用。
- createRemoteEnvironment():创建一个远程执行环境,允许Flink程序在远程集群上执行,开发者可以在本地编写和提交作业,这种一般都是在调试的时候使用。
ExecutionEnvironment env = ExecutionEnvironment.createRemoteEnvironment("127.0.0.1",8081,"D:\\implat-flink-1.0-SNAPSHOT.jar");
- getExecutionEnvironment():获取或创建一个执行环境,大多数情况下,FLink程序只需要一个全局的执行环境,推荐使用
getExecutionEnvironment,这样有助于避免多个执行环境实例。
StreamExecutionEnvironment
用于流数据处理的执行环境,通常用于需要处理连续数据流的应用,如消息队列或实时数据源接收的数据,创建方法参见ExecutionEnvironment。
环境调优
并行度
在Flink中,parallelism参数是一个非常重要的设置,它定义了Flink作业中每个操作的并行度,换言之,parallelism决定了Flink可以同时执行多少个任务,如果设置的太高,会导致资源争用和调度开销增加;设置的太低,又无法充分利用集群的计算能力。
缓冲时间
在Flink的流处理中,数据在操作符之间进行缓冲,以便进行批处理或窗口操作,setBufferTimeout允许设置一个时间限制,超过这个时间先斩后奏,即使缓冲区没有达到预期的大小,数据也会被发送出去,超时时间通常以毫秒为单位。
一般来说,超时时间过短可能会导致频繁的数据传输,从而增加网络负载和延迟。超时时间过长虽然会减少传输频率,但也会导致延迟增加。
检查点
为了保证发生故障后数据能够恢复到故障之前,Flink提供了Checkpoint机制,Checkpoint可以将同一时间点作业/算子的状态数据统一快照备份,当故障发生恢复后,Flink会将所有任务的状态恢复至最后一次Checkpoint中的状态,并从那里重新开始执行。
该功能默认情况下是禁用的,可以通过调用env.enableCheckpointing(interval)来启用checkPoint,interval的单位是ms,如果需要高级设置,可以通过如下方法:
//设置模式为至少一次
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.AT_LEAST_ONCE);
//确认checkpoint的时间间隔至少为100ms
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(100);
//checkpoint必须在60s内完成,否则会被抛弃
env.getCheckpointConfig().setCheckpointTimeout(60000);
//同一时间只允许一个checkpoint进行
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
状态备份
State Backend和Checkpoint配合使用,Checkpoint的数据存储的位置取决于State Backend,Flink提供了以下几种开箱即用的State Backend:
- MemoryStateBackend:默认值,保存在Java堆上,该模式适用于本地开发和调试,或者很小的状态作业;
- FsStateBackend:状态存储在文件系统中;
- RocksDbStateBackend:状态存储在RocksDB数据库中,RocksDB是一种嵌入式的本地数据库。
设置示例:
env.setStateBackend(new FsStateBackend("hdfs://node:port/flink/checkpoints"));

浙公网安备 33010602011771号