【问题标题】:How does Flink save state in checkpoint/savepoint if some of state descriptor is removed如果删除了某些状态描述符,Flink 如何在检查点/保存点中保存状态
【发布时间】:2021-12-22 06:54:26
【问题描述】:

如果我有一个具有 2 个键控状态的简单 flink 作业,比如 State1 和 State2。

作业配置了 RocksDB 后端。每个州都有 10GB 的数据。

如果我更新代码以便不使用其中一个状态(状态描述符已删除,相关代码已删除。)。例如 State1 被删除。

下次 flink 触发 checkpoint 或者我手动触发 savepoint 的时候。 checkpoint/savepoint 是否还会保存 State1 的数据?

【问题讨论】:

    标签: apache-flink


    【解决方案1】:

    如果您使用带有增量检查点的 RocksDB,则过时状态描述符的状态将保留在检查点中,直到它被压缩(但可以忽略)。对于任何完整快照,State1 都不会保留。

    使用 RocksDB,过期状态最终会被 RocksDB 压缩过滤器移除。在此之前,如果设置了 StateTtlConfig.StateVisibility.NeverReturnExpired ,则状态后端返回 null 来代替过期值。

    Documentation on State TTL

    【讨论】:

    • 如果我启用增量检查点,数据什么时候会被压缩掉?我阅读了文档并知道有两种“压缩”: 1. 在后台调用并完成删除 api 时会发生 RocksDB 压缩。 2. flink 跨检查点使用rocksDb 元数据文件和“压缩”无用的sst 文件。我猜 #1 不会发生在 State1 中的数据上。那么是不是说当flink触发一个增量checkpoint时,会删除State1的rocksDB数据库呢?你能解释更多关于“(但它会被忽略)”的细节吗?
    • 我已经扩展了我的答案;希望现在更清楚了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    相关资源
    最近更新 更多