Flink checkPoint容错机制配置
flink版本:flink1.13.1
1. checkpoint
import org.apache.flink.api.common.restartstrategy.RestartStrategies;
import org.apache.flink.api.common.time.Time;
import org.apache.flink.runtime.state.memory.MemoryStateBackend;
import org.apache.flink.streaming.api.CheckpointingMode;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import java.util.concurrent.TimeUnit;
public class StateBackendTest {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 1.设置状态后台
env.setStateBackend(new MemoryStateBackend()); // 本地内存状态后台
//env.setStateBackend(new FsStateBackend("hdfs://hadoop100:9000/flink/checkpoints"));
//env.setStateBackend(new RocksDBStateBackend("hdfs://hadoop100:9000/flink/checkpoints",true));
// 2. 设置检查点 每秒执行1次checkPoint
env.enableCheckpointing(1000);
// checkPoint 参数优化
// checkPoint 模式,精确一次
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
// checkPoint超时时间,60s
env.getCheckpointConfig().setCheckpointTimeout(60000);
// 同一时间只允许进行一个检查点
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
// 设置两次检查点的最小的时间间隔
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(500);
//设置是否优先使用检查点恢复机制。默认为false,即checkpoint和savepoint之间采用就近原则,设为true,则优先使用checkpoint
env.getCheckpointConfig().setPreferCheckpointForRecovery(false);
// 设置可容忍的检查点失败数量,默认是0,即不允许任何checkpoint检查点失败,如果checkpoint失败则任务失败,直接重启
env.getCheckpointConfig().setTolerableCheckpointFailureNumber(0);
// 3. 设置重启策略
/**
* RestartStrategies.fixedDelayRestart(3,60000L)
* 第一个参数:重试次数;
* 第二个参数:每次重试之间的时间间隔`在这里插入代码片`
*/
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3,60000L));
/**
* (RestartStrategies.failureRateRestart(int failureRate, Time failureInterval, Time delayInterval))
* 第一个参数:给定的时间间隔内,作业失败前的最大重试次数
* 第二个参数:设置失败的时间间隔,提供给第一个参数
* 第三个参数:每次重试之间的时间间隔
*/
env.setRestartStrategy(RestartStrategies.failureRateRestart(5, Time.of(5, TimeUnit.MINUTES), Time.of(10, TimeUnit.SECONDS)));
env.execute("StateBackend");
}
}
- 其他参考
// 创建环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 指定了checkpoint的时间间隔以及配置Mode为保持State的一致性
env.enableCheckpointing(1000, CheckpointingMode.EXACTLY_ONCE);
// 也可以这么配置
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
// 配置Checkpoint彼此之间的停顿时间(即限制在某段时间内,只能有一个Checkpoint进行)单位毫秒
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(60 * 1000);
// 配置Checkpoint的并发量(比如某些程序的Checkpoint生产需要很长时间,可以通过这种方式加大效率)
env.getCheckpointConfig().setMaxConcurrentCheckpoints(3);
// 配置Checkpoint的超时时间(避免Checkpoint生产时间过长)默认10分钟
env.getCheckpointConfig().setCheckpointTimeout(5 * 1000);
// 配置Checkpoint失败的最大容忍次数,默认0次,如果超过了这个次数,则认为Checkpoint失败
env.getCheckpointConfig().setTolerableCheckpointFailureNumber(3);
// 配置Checkpoint的时间间隔,单位毫秒
env.getCheckpointConfig().setCheckpointInterval(1000);
// 配置Checkpoint的存放的文件路径
env.setStateBackend(new FsStateBackend("file:///tmp/flink/checkpoints"));
// Checkpoint默认的配置是失败了,就重启恢复。因此当一个Flink失败/人为取消的时候,Checkpoint会被人为清除
// 配置Checkpoint开启 外化功能 。即应用程序停止时候,保存Checkpoint
// 支持2种外化:DELETE_ON_CANCELLATION:当应用程序完全失败或者明确地取消时,保存 Checkpoint。
// RETAIN_ON_CANCELLATION:当应用程序完全失败时,保存 Checkpoint。如果应用程序是明确地取消时,Checkpoint 被删除。
env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
2. savepoint
- 手动savepoint
# flink savepoint [jobId] [存放的快照地址(本地或hdf远程)]
flink savepoint 93e589184e0e78d57077178438807889 /tmp/flink/checkpoints
flink savepoint JobId hdfs://hadoop102:8020/flink/save
- 删除
注意:一定是要删除通过savepoint命令生成的目录(前缀为savepoint)
flink savepoint -d /tmp/flink/checkpoints/savepoint-93e589-957052f01c84
flink savepoint -d hdfs://hadoop102:8020/flink/save/savepoint-93e589-957052f01c84