Apache Flink - Checkpoint/Savepoint 如何工作如果我们 运行 复制作业(多租户)

Apache Flink - How Checkpoint/Savepoint works If we run duplicate jobs (Multi Tenancy)

我有多个 Kafka 主题(多租户),我根据主题数量 运行 多次 运行 同一个作业,每个作业都使用来自一个主题的消息。我已将文件系统配置为状态后端。

假设有 3 个作业 运行ning。检查点在这里如何运作? 3个作业是否都将检查点信息存储在同一路径中?如果任何作业失败,作业如何知道从哪里恢复检查点信息?我们过去在向 flink 集群提交作业时会给出一个作业名称。有什么关系吗?一般情况下,Flink 是如何区分作业及其检查点信息以在作业失败或手动重启时恢复的(无论相同或不同的作业)?

案例1:作业失败会怎样?

案例 2:如果我们手动重启作业会怎样?

谢谢

JobManager 知道每个作业检查点,并保留该元数据,检查点被保存到检查点目录(通过 flink-conf.yaml),在此目录下它会创建一个随机哈希目录每个检查点。

情况 1:作业将重新启动(取决于您的回退策略...),如果启用了检查点,它将读取最后一个检查点。

案例 2:我不是 100% 确定,但我认为如果您手动取消作业然后提交,它不会读取检查点。您需要使用保存点。 (您可以使用保存点终止您的工作,然后使用相同的保存点再次提交您的工作)。只需确保每个操作员都有一个 UID。您可以在此处阅读有关保存点的更多信息:https://ci.apache.org/projects/flink/flink-docs-stable/ops/state/savepoints.html

跟进@ShemTov 所说的内容:

每个作业都会将其检查点写入以其 jobId 命名的子目录中。

如果您手动取消作业,则会删除检查点(因为恢复不再需要它们),除非它们已配置为保留:

CheckpointConfig config = env.getCheckpointConfig();
config.enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);

保留的检查点可用于手动重启和重新缩放。

Docs on retained checkpoints.

如果您配置了高可用性,作业管理器关于检查点的元数据将存储在 HA 存储中,因此恢复不依赖于作业管理器的生存。