flink设置checkpoint部署后一直重启,出现检查点无法写入的问题

  • Post author:
  • Post category:其他


  1. 问题描述

    项目一共有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 版权协议,转载请附上原文出处链接和本声明。