Flink学习笔记——checkpoint

1.开启checkpoint

默认情况下checkpoint是禁用的,需要手动进行开启,如下

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);
env.getCheckpointConfig().setCheckpointTimeout(3600000); // checkpoint1小时超时
env.enableCheckpointing(180000, CheckpointingMode.EXACTLY_ONCE); // 3分钟做一次checkpoint
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1); // 同一时间只允许一个 checkpoint 进行
env.getCheckpointConfig().setTolerableCheckpointFailureNumber(2); // 允许两个连续的 checkpoint 错误
env.setStateBackend(new EmbeddedRocksDBStateBackend(true)); // 使用rocksdb state backend
env.getCheckpointConfig().setCheckpointStorage("s3://xxxx/xxxx/test_checkpoint"); // 指定gcheckpoint路径
env.getCheckpointConfig().setExternalizedCheckpointCleanup(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION); // 使用 externalized checkpoints,这样 checkpoint 在作业取消后仍就会被保留

其他配置参考官方文档

https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/dev/datastream/fault-tolerance/checkpointing/

2.从保留的 checkpoint 中恢复状态

bin/flink run -s checkpoint_path

参考:https://nightlies.apache.org/flink/flink-docs-master/zh/docs/ops/state/checkpoints/

3.checkpoint相关问题

做checkpoint很慢问题排查,参考:2022年最新版 | Flink经典线上问题小盘点

增量checkpoint,参考:Flink 管理大型状态之增量 Checkpoint

大状态与 Checkpoint 调优,参考:大状态与 Checkpoint 调优

 

4.checkpoint原理

Checkpoint 由 CheckpointCoordinator 发起、确认,通过Rpc 通知 Taskmanager 的具体算子完成 Checkpoint 操作,参考:Flink Checkpoint 流程,具体步骤如下

1、CheckpointCoordicator tirgger checkpoint 到 source
2、Source
  1、生成并广播 CheckpointBarrier	
  2、Snapshot state(完成后 ack Checkpoint 到 CheckpointCoordicator)
3、Map	
  1、接收到 CheckpointBarrier	
  2、广播 CheckpointBarrier	
  3、Snapshot state(完成后 ack Checkpoint 到 CheckpointCoordicator)
4、Sink	
  1、接收到 CheckpointBarrier	
  2、Snapshot state(完成后 ack Checkpoint 到 CheckpointCoordicator)
5、CheckpointCoordicator 接收到 所有 ack	
  1、给所有算子发 notifyCheckpointComplete
6、Source、Map、Sink 收到 notifyCheckpointComplete

详细步骤参考:Checkpoint 原理剖析与应用实践

 

5.checkpoint和savepoint区别

Savepoint

Checkpoint

Savepoint是由命令触发, 由用户创建和删除

Checkpoint被保存在用户指定的外部路径中, flink自动触发

保存点存储在标准格式存储中,并且可以升级作业版本并可以更改其配置。

当作业失败或被取消时,将保留外部存储的检查点。

用户必须提供用于还原作业状态的保存点的路径。

用户必须提供用于还原作业状态的检查点的路径。

 

 
posted @ 2016-05-18 12:53  tonglin0325  阅读(488)  评论(0编辑  收藏  举报