flink中taskmanager产生的checkpoint文件占用空间一直增长是什么原因?

Flink1.19运行一段时间后发现磁盘空间被taskmanager下产生的checkpoint文件(900G)将存储占满了,然后flink程序挂掉,而jobmanager产生的ck目录并不大,状态后端使用的是增量rocksdb,观察发现rocksdb占用空间并不多,请问是什么原因?如何减小ck占用大小,让业务长时间正常运行。
flink-conf.yaml主要配置如下:
state.backend.fs.clean-tmp-files: true

每2小时清理一次

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.min-pause: 0

execution.checkpointing.mode: EXACTLY_ONCE
execution.checkpointing.timeout: 30min
execution.checkpointing.tolerable-failed-checkpoints: 5
execution.checkpointing.unaligned: true

展开
收起
hlg4kunfbuxuq 2025-04-17 11:22:08 67 发布于四川 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
  • 资深 C++与人工智能程序员。精通 C++,善用其特性构建稳健架构。在人工智能领域,深入研习机器学习算法,借 C++与 OpenCV 等实现计算机视觉应用,于自然语言处理构建文本处理引擎。以敏锐洞察探索技术融合边界,用代码塑造智能未来。

    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文件占用空间也可能随之增长。

    2025-04-17 22:26:42 举报
    赞同 98 评论

    评论

    全部评论 (0)

    登录后可评论

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

还有其他疑问?
咨询AI助理
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等