开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink CDC里 rocksdb 全量checkpoint开启了ttl,为什么文件还会增大?

Flink CDC里 rocksdb 全量checkpoint开启了ttl,为什么checkpoint文件还持续增大 ?

展开
收起
小小鹿鹿鹿 2024-02-25 22:35:44 51 0
3 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在Flink CDC中,即使开启了RocksDB全量checkpoint的TTL,checkpoint文件大小仍然可能会持续增大。以下是一些可能的原因:

    1. 写入放大:RocksDB的写放大是指每次写入操作导致的磁盘写入量大于实际数据量的现象。这可能会导致checkpoint文件大小的增加。为了减小写放大的影响,可以适当调整compaction参数。
    2. Flush速度慢:当所有的memtable都写满,但flush速度较慢时,会导致写停顿,从而使得checkpoint文件大小增加。如果内存充足或者使用的是机械硬盘,可以适当调大max_write_buffer_number参数以缓解这个问题。
    3. 状态注册和过期:Flink利用RocksDB的append-only特性,将两次checkpoint之间的SST文件列表的差异作为状态增量上传到分布式文件系统上,并通过JobMaster中的SharedStateRegistry进行状态的注册和过期。这个过程可能会导致checkpoint文件大小的增加。
    4. 动态平衡未达到:在任务运行一段时间后,新增和过期的状态应该达到一个动态平衡。然而,在某些情况下,这个平衡可能没有被及时达到,导致checkpoint文件大小持续增长。

    综上所述,即使开启了RocksDB全量checkpoint的TTL,由于写入放大、Flush速度慢、状态注册和过期以及动态平衡未达到等原因,checkpoint文件大小仍然可能会持续增大。

    2024-02-26 13:25:44
    赞同 展开评论 打赏
  • 当 RocksDB 全量 checkpoint 开启了 TTL(Time To Live)时,checkpoint 文件仍然可能会持续增大,原因可能包括但不限于:

    • Checkpoint TTL 设置的是 checkpoint 在完成后的保留时间,在该时间段内所有 checkpoint 文件都会被保存,即使进行了新的 checkpoint,旧的文件也不会立即删除。
    • RocksDB 内部的状态数据随着任务运行不断增长,即使开启了 TTL,新的 checkpoint 中包含的状态数据也可能会比之前的更大。
    • 如果您的应用存在状态数据未被清理或者有持续增加的状态,则 checkpoint 大小不会因为 TTL 而减小。

    要控制 checkpoint 文件大小的增长,请关注 Flink 应用的状态管理,确保不必要的状态得到清理,并合理设置 RocksDB 的内部选项以限制其状态大小。确认 checkpoint TTL 参数是否正确设置并在达到设定时间后检查点文件能否成功清理。

    2024-02-26 11:47:04
    赞同 展开评论 打赏
  • 在 Apache Flink 中,当使用 RocksDB 作为状态后端,并且开启了 Checkpoint TTL(Time To Live)时,Checkpoint 文件大小仍然持续增大的原因可能包括以下几点:

    1. 增量checkpoint的累积

      • 即使设置了TTL,但如果没有达到过期时间或清理周期,RocksDB 的增量 checkpoint 数据会不断累加。每次 checkpoint 都会包含从上一个 checkpoint 点以来所有变更的状态数据。
    2. 状态清理不及时

      • 如果设置的TTL值较长或者由于作业本身没有发生足够频繁的 checkpoint,导致已过期状态的数据还没有被清理掉。Flink并不会在每个 checkpoint 时都清理旧的状态,而是在检查到某个 checkpoint 已经过期时才会尝试删除它。
    3. 状态增长速度大于清理速度

      • 如果您的应用程序状态更新非常活跃,即使有状态清理机制,新产生的状态量可能远超过因TTL被清理掉的状态量,因此总体上 checkpoint 文件大小仍会增加。
    4. 配置问题

      • 检查是否正确设置了 RocksDB 的 state.backend.rocksdb.checkpoint.cleanup 参数,以确保过期的 checkpoint 被正确清理。
      • 配置的 table.exec.state.ttl 可能仅影响了在内存中的状态存储,而不直接影响 RocksDB 在磁盘上的 checkpoint 清理策略。
    5. 故障恢复与保留策略

      • 在某些情况下,为了保证故障恢复,Flink 可能会保留最近的一些大状态 checkpoint,即使它们已经过期。

    要解决这个问题,请确保您对 RocksDB 后端相关的 checkpoint 清理和 TTL 设置进行了正确的配置,并结合实际应用状态更新情况和资源限制进行调优。同时,定期监控并分析 checkpoint 文件的增长情况以及作业运行日志可以帮助定位具体问题所在。

    2024-02-26 11:08:17
    赞同 1 展开评论 打赏

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

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载