FLINK-状态管理-配置checkpoint
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 每隔1000 ms进行启动一个检查点【设置checkpoint的周期】 env.enableCheckpointing(1000); // 设置模式为exactly-once (这是默认值) env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE); // 确保检查点之间有至少500 ms的间隔【checkpoint最小间隔】 env.getCheckpointConfig().setMinPauseBetweenCheckpoints(500); // 检查点必须在一分钟内完成,或者被丢弃【checkpoint的超时时间】 env.getCheckpointConfig().setCheckpointTimeout(60000); // 同一时间只允许进行一个检查点 env.getCheckpointConfig().setMaxConcurrentCheckpoints(1); // 表示一旦Flink处理程序被cancel后,会保留Checkpoint数据,以便根据实际需要恢复到指定的Checkpoint【详细解释见备注】 env.getCheckpointConfig().enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION); //ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION:表示一旦Flink处理程序被cancel后,会保留Checkpoint数据,以便根据实际需要恢复到指定的Checkpoint //ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION: 表示一旦Flink处理程序被cancel后,会删除Checkpoint数据,只有job执行失败的时候才会保存checkpoint //设置statebackend //env.setStateBackend(new MemoryStateBackend()); //env.setStateBackend(new FsStateBackend("hdfs://zzy:9000/flink/checkpoints")); //rocksDB需要引入依赖flink-statebackend-rocksdb_2.11 //env.setStateBackend(new RocksDBStateBackend("hdfs://zzy:9000/flink/checkpoints",true)); env.setStateBackend(new FsStateBackend("hdfs://192.168.5.63:9000/flink/checkpoints"));
State Backend(状态的后端存储)
-
默认情况下,state会保存在taskmanager的内存中,checkpoint会存储在JobManager的内存中。
-
state 的store和checkpoint的位置取决于State Backend的配置
- env.setStateBackend(new FsStateBackend("hdfs://namenode:9000/flink/checkpoints",true)) //异步checkpoint
- env.setStateBackend(new MemoryStateBackend()) //默认存储方式
- env.setStateBackend(new RocksDBStateBackend(filebackend, true)) //【需要添加第三方依赖】