【问题标题】:Apache flink on Kubernetes - Resume job if jobmanager crashesKubernetes 上的 Apache flink - 如果 jobmanager 崩溃则恢复工作
【发布时间】:2019-02-05 20:31:19
【问题描述】:

我想在 kubernetes 上运行 flink 作业,使用(持久的)状态后端,崩溃的任务管理器似乎没有问题,因为如果我理解正确,他们可以询问作业管理器他们需要从哪个检查点恢复。

一个崩溃的工作经理似乎有点困难。在这个flip-6 page 我读到需要zookeeper 才能知道jobmanager 需要使用哪个检查点来恢复和领导选举。

看到 kubernetes 会在 jobmanager 崩溃时重新启动它,有没有办法让新的 jobmanager 恢复作业而无需设置 zookeeper 集群?

我们目前正在研究的解决方案是:当 kubernetes 想要杀死 jobmanager(例如因为它想将其移动到另一个 vm)然后创建一个保存点时,但这仅适用于正常关闭。

编辑: http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/Flink-HA-with-Kubernetes-without-Zookeeper-td15033.html好像很有意思但是没有后续

【问题讨论】:

    标签: kubernetes apache-flink high-availability flink-streaming


    【解决方案1】:

    根据 Till 的回答和 Xeli 的部分实现,我实现了基于文件的 HA 的轻量级版本。
    您可以在 this github repo 中找到代码 - 在生产环境中运行良好。

    还写了一个博客系列,解释如何运行job cluster on k8s,特别是关于这个file-based HA implementation

    【讨论】:

      【解决方案2】:

      对于对此感兴趣的每个人,我目前使用 Kubernetes ConfigMaps 和 blob 存储(例如 S3)来评估和实施一个类似的解决方案,以在 JobManager 重新启动时持久保存作业元数据。无需使用本地存储,因为该解决方案依赖于持久化到 blob 存储的状态。

      Github thmshmm/flink-k8s-ha

      还有一些工作要做(保持检查点状态),但基本实现工作得很好。

      如果有人喜欢使用多个 JobManager,Kubernetes 会提供一个接口来进行领导者选举,这可以用于此目的。

      【讨论】:

        【解决方案3】:

        开箱即用,Flink 需要 ZooKeeper 集群才能从 JobManager 崩溃中恢复。但是,我认为您可以拥有HighAvailabilityServicesCompletedCheckpointStoreCheckpointIDCounterSubmittedJobGraphStore 的轻量级实现,这可以让您走得更远。

        假设你只有一个 JobManager 一直在运行(不完全确定 K8s 是否可以保证这一点)并且你有一个持久存储位置,你可以实现一个 CompletedCheckpointStore 从持久存储系统中检索完成的检查点(例如读取所有存储的检查点文件)。此外,您将拥有一个文件,其中包含 CheckpointIDCounter 的当前检查点 id 计数器和 SubmittedJobGraphStore 的所有提交的作业图。因此,基本思想是将所有内容存储在单个 JobManager 可以访问的持久卷上。

        【讨论】:

        • K8s 可以保证一个持久化存储位置只挂载在一个 pod/jobmanager 中。因此,这也将保证只有一名工作经理还活着,这似乎很有希望。如果我实现了这个,我怎样才能说服 flink 使用这个 HA 服务而不是 zookeeper?
        • 你需要实现自己的HighAvailabilityServices并用它实例化Flink。以下 PR 可以帮助您:github.com/apache/flink/pull/5530。它允许提供自定义的HighAvailabilityServices 实现。
        • 这个运气好吗?我面临同样的情况。谢谢
        • @Xeli 您是否设法让自定义的 HighAvailabilityServices 工作,以便在 Kubernetes 上的 Flink 集群重新启动后重新启动作业?我想达到同样的效果,如果您能分享您的代码,我将不胜感激。
        • @sceee 我确实开始了一个轻量级的实现来实现这一点,而且看起来并不难。但我从来没有来得及完成它。我有一个新项目即将在我想要的地方出现,所以当我再次拿起它时,我会更新这个问题:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多