Checkpoint周期性进行。如果checkpoint操作耗时比checkpoint间隔时间还长,在上一个checkpoint未完成的时候,即便到了下一个checkpoint触发时间,新的checkpoint操作不会立即开始。只有在前一个checkpoint完成之后下一个checkpoint才能开始。这种情况下checkpoint会一直进行下去,严重影响系统性能。
为了避免这种情况,可以在代码中指定checkpoint之间的最小时间间隔。方法如下:
StreamExecutionEnvironment.getCheckpointConfig().setMinPauseBetweenCheckpoints(milliseconds)
注意:可以在应用中通过配置CheckpointConfig
,可以允许多个checkpoint过程同步执行。
除此之外,checkpoint还支持更多的配置:
// 开启Checkpoint,设置间隔时间 env.enableCheckpointing(TimeUnit.MINUTES.toMillis(10)); // 配置 Checkpoint CheckpointConfig checkpointConf = env.getCheckpointConfig(); // 启用EXACTLY_ONCE模式,使用Unaligned Checkpoint,保证数据精准一次投送,但会略微增大延迟 // 启用AT_LEAST_ONCE模式,barrier不会对齐,投送数据可能会重复,但是延迟很低 checkpointConf.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE) // 最小间隔时间,上面已介绍过 checkpointConf.setMinPauseBetweenCheckpo