我有多个Kafka主题(多租户),并且我根据主题数运行同一作业多次,每个作业消耗一个主题的消息。我已将文件系统配置为状态后端。
假设有3个作业正在运行。检查点在这里如何工作?是否所有3个作业都将检查点信息存储在同一路径中?如果任何作业失败,该作业如何知道从何处恢复检查点信息?在将作业提交到flink集群时,我们曾经给出作业名称。它有什么关系吗?一般来说,Flink如何区分作业及其要检查的点信息,以防出现故障或手动重新启动作业(无论相同或不同的作业)?
案例1:如果发生工作失败,会怎样?
案例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);
保留的检查点可用于手动重启和缩放。
如果配置了高可用性,则作业管理器有关检查点的元数据将存储在HA存储区中,因此恢复不取决于作业管理器的生存期。