0

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

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

案例1:如果工作失败会发生什么?

Case2:如果我们手动重启作业会发生什么?

谢谢

4

2 回答 2

0

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

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

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

于 2020-07-16T13:35:17.380 回答
0

跟进@ShemTov 所说的话:

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

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

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

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

保留检查点的文档

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

于 2020-07-16T19:35:56.170 回答