Apache Flink-检查点/保存点如何工作如果我们运行重复作业(多租户)

时间:2020-07-16 12:57:45

标签: apache-flink flink-streaming flink-cep flink-sql flink-batch

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

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

案例1:如果发生工作失败,会怎样?

案例2:如果我们手动重新启动作业会发生什么情况?

谢谢

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

跟进@ShemTov所说的话:

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

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

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

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

Docs on retained checkpoints

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