Flink实战-Environment

Flink程序执行前,需要先获取执行环境,根据执行环境的不同,可分为ExecutionEnvironmentStreamExecutionEnvironment

ExecutionEnvironment

用于批量数据处理的执行环境,通常用于需要处理大量静态数据的场景,如磁盘或内存中的数据集。

  1. createLocalEnvironment():创建一个新的本地执行环境,一般在开发过程中使用。
  2. createRemoteEnvironment():创建一个远程执行环境,允许Flink程序在远程集群上执行,开发者可以在本地编写和提交作业,这种一般都是在调试的时候使用。
ExecutionEnvironment env = ExecutionEnvironment.createRemoteEnvironment("127.0.0.1",8081,"D:\\implat-flink-1.0-SNAPSHOT.jar");
  1. 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"));
posted @ 2024-07-26 20:32  破落户儿  阅读(91)  评论(0)    收藏  举报