一、问题描述
flink消费kafka 数据过程中,结果数据正常输出,但是kafka产生数据堆积
二、原因分析
flink 任务运行中,checkpoint 失败导致offset 一直未提交,导致kafka 数据堆积告警
三、优化设置
1.查看日志,分析checkpoint 失败原因,考虑资源及代码逻辑优化,或者checkpoint 配置优化,常见的checkpoint 配置
// 每10s 开始一次checkpoint
senv.getCheckpointConfig().setCheckpointInterval(10000L);
// 设置模式为最少一次
senv.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.AT_LEAST_ONCE);
// 确认 checkpoints 之间的时间会进行 1 分钟
senv.getCheckpointConfig().setMinPauseBetweenCheckpoints(10000L);
// 设置检查点被丢弃所花费的最大时间 5分钟
senv.getCheckpointConfig().setCheckpointTimeout(300000L);
// 允许Checkpoint连续失败次数 10次
senv.getCheckpointConfig().setTolerableCheckpointFailureNumber(10);
// 同一时间只允许一个 checkpoint 进行
senv.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
2.(粗暴做法,不推荐)由于checkpoint 经常失败影响任务运行,因此关闭checkpoint,关闭checkpoint后,需配置kafka 消费者自动提交offset
// 设置提交方式为自动提交
properties.setProperty(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,"true");
// 设置提交间隔为1000ms
properties.setProperty(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG,"1000");
官网描述:
禁用checkpoint后,任务会默认使用savepoint,这个时候任务自动重启功能会失效,为避免savepoint失败导致任务失败的情况,建议配置
checkpoint失败间隔次数senv.getCheckpointConfig().setTolerableCheckpointFailureNumber(10)
问题圆满解决