Flink1.19运行一段时间后发现磁盘空间被taskmanager下产生的checkpoint文件(900G)将存储占满了,然后flink程序挂掉,而jobmanager产生的ck目录并不大,状态后端使用的是增量rocksdb,观察发现rocksdb占用空间并不多,请问是什么原因?如何减小ck占用大小,让业务长时间正常运行。
flink-conf.yaml主要配置如下:
state.backend.fs.clean-tmp-files: true
state.backend.fs.cleanup-interval: 7200000
state.backend: rocksdb
state.backend.rocksdb.localdir: /opt/flink/data/flink-rocksdb
state.backend.local-recovery: false
state.checkpoints.num-retained: 1
state.checkpoints.dir: file:////opt/flink/data/flink-checkpoints
state.savepoints.dir: file:////opt/flink/data/flink-savepoints
state.backend.incremental: true
execution.checkpointing.interval: 10min
execution.checkpointing.externalized-checkpoint-retention: RETAIN_ON_CANCELLATION
execution.checkpointing.max-concurrent-checkpoints: 1
execution.checkpointing.mode: EXACTLY_ONCE
execution.checkpointing.timeout: 30min
execution.checkpointing.tolerable-failed-checkpoints: 5
execution.checkpointing.unaligned: true
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
Flink中TaskManager产生的Checkpoint文件占用空间一直增长,可能有以下原因:
数据量增加
输入数据增多:如果作业处理的输入数据量不断增加,Checkpoint需要记录更多的状态信息,包括算子状态、窗口状态等,以保证在故障恢复时能准确恢复作业状态,这会导致Checkpoint文件占用空间相应增长。
状态数据累积:某些算子可能会累积状态数据,如窗口算子在处理长时间跨度的窗口时,随着时间推移,窗口内的数据量不断增加,状态数据也会持续膨胀,使得Checkpoint文件变大。
Checkpoint设置不合理
检查点间隔过短:如果设置的Checkpoint间隔时间过短,在单位时间内会产生更多的Checkpoint文件。虽然每个Checkpoint记录的状态量可能相对较少,但文件数量增多会导致总体占用空间增加。
保留策略不当:Flink的Checkpoint保留策略决定了保存多少个历史Checkpoint。如果保留了过多的历史Checkpoint,而这些Checkpoint又没有及时被清理,就会导致占用空间不断上升。
状态后端选择
不同的状态后端对Checkpoint的存储和管理方式不同。例如,FsStateBackend将状态数据存储在文件系统中,而RocksDBStateBackend将状态数据存储在本地的RocksDB数据库中。如果选择的状态后端不适合当前作业的特点,可能会导致Checkpoint文件占用空间增长过快。比如,对于大规模的状态数据,RocksDBStateBackend可能因为其本地存储的特性,在处理高并发的Checkpoint时,可能会出现文件碎片等问题,导致空间占用增加。
作业逻辑问题
内存泄漏:作业中存在内存泄漏,导致算子状态不断累积,无法被正常释放。即使在Checkpoint时,这些本应被清理的状态也会被保存下来,使得Checkpoint文件越来越大。
状态更新频繁:作业中的某些算子频繁更新状态,而这些状态又不能及时被合并或清理,会导致状态数据不断膨胀,进而使Checkpoint文件占用空间持续增长。
外部系统影响
数据倾斜:如果作业中存在数据倾斜,某些TaskManager处理的数据量远大于其他TaskManager,这些TaskManager上的状态数据会快速增长,导致其产生的Checkpoint文件占用空间也相应增大。
依赖的外部系统变化:作业依赖的外部系统(如数据库、消息队列等)发生变化,可能导致作业读取的数据量或数据格式发生改变,从而使作业的状态数据发生变化,Checkpoint文件占用空间也可能随之增长。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。
你好,我是AI助理
可以解答问题、推荐解决方案等
评论
全部评论 (0)