-
问题描述
项目一共有7个应用程序,只有其中一个程序出现检查点问题,参数配置都相同。
flink部署后的异常为:
org.apache.flink.util.FlinkRuntimeException: Exceeded checkpoint tolerable failure threshold
最终发现这个提示是没有用的,最后经过一番艰苦的努力,终于解决了问题,这里直接上干货。
问题原因:
由于这个程序连接的数据库比较多,可能会出现这个检查点没有做完,被丢弃掉,又重新开始了一个,循环往复。导致的问题!
解决:
// TODO 2.设置状态后端和检查点-> 并行度,等于kafka的分区数,提高读取速度
env.setParallelism(3);
RocksDBStateBackend rocksDBStateBackend = new RocksDBStateBackend(CK.CKURL);
env.setStateBackend(rocksDBStateBackend);
// 每 1分钟 开始一次 checkpoint
env.enableCheckpointing(CK.CKTIME);
// 高级选项:l
// 设置模式为精确一次 (这是默认值)fListState
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
// 确认 checkpoints 之间的时间会进行 500 ms
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(CK.CKBT);
// Checkpoint 必须在3分钟内完成,否则就会被抛弃(设置大一些,防止出现没有做完的问题)
env.getCheckpointConfig().setCheckpointTimeout(CK.CKTIMEOUT);
// 同一时间只允许一个 checkpoint 进行
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
// 开启在 job 中止后仍然保留的 externalized checkpoints
env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
主要是检查点超时时间设置长一点,如果遇到类似的问题,可以试着修改一下上述的参数。
关于checkpoint的好处,这里就不作陈述。
版权声明:本文为weixin_42965737原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。