状态大的Flink恢复/重启作业



我在K8上运行flink集群,状态为1TB。

我面临的一个问题是获取保存点并恢复作业。现在,这些更新有时是简单的代码更新,而不是并行性更改。但是获取一个保存点,然后用旧状态恢复新作业的时间是相当高的。

是否有一种方法可以对作业进行就地更新,使本地状态和作业不发生更改,从而可以避免在执行保存点+还原时所消耗的时间?

在许多情况下,您可以使用保留的(外部化的)检查点来代替保存点。这是有效的,但以下情况除外:

  • 使用未对齐的检查点重新缩放(此限制将消失;看到flink - 17979)
  • 有涉及状态
  • 的作业拓扑更改
  • 需要状态迁移的类型发生了变化

您可能会发现拓扑更改和状态迁移在某些情况下有效,但这不能保证。

对于RocksDB上的大状态,您将需要使用增量检查点。完整的检查点和保存点需要很长时间,但是增量检查点要快得多。

如果你想重新调整,增加RocksDB可用的线程数是有益的,更像这样:

state.backend.rocksdb.checkpoint.transfer.thread.num: 8
state.backend.rocksdb.thread.num: 8

最新更新