【问题标题】:Is it possible to run a single container Flink cluster in Kubernetes with high-availability, checkpointing, and savepointing?是否可以在 Kubernetes 中运行具有高可用性、检查点和保存点的单容器 Flink 集群?
【发布时间】:2026-01-10 21:15:02
【问题描述】:

我目前正在运行一个 Flink 会话集群(Kubernetes、1 个 JobManager、1 个 TaskManager、Zookeeper、S3),其中运行多个作业。

随着我们努力增加更多工作,我们正在寻求改进我们的部署和集群管理策略。我们正在考虑迁移到使用作业集群,但是对将产生的容器数量有所保留。每个作业一个容器不是问题,但是每个作业两个容器(1 个 JM 和 1 个 TM)引起了对内存消耗的担忧。一些作业需要高可用性以及使用检查点和从保存点恢复/获取保存点的能力,因为它们在一个窗口上聚合事件。

从我阅读文档和在 Google 上花费的时间来看,我没有发现任何似乎可以说明所考虑的事情是否真的可行的东西。

有没有可能做以下三件事:

  1. 在同一个容器中将 JobManager 和 TaskManager 作为单独的进程运行,并将其用作 Flink 集群,或者
  2. 将 JobManager 和 TaskManager 作为同一个进程运行,或者
  3. 将作业作为独立 JAR 运行,能够从/获取检查点恢复,并能够获取保存点并从该保存点恢复?

(如果有人有更好的想法,我会全力以赴。)

【问题讨论】:

    标签: kubernetes apache-flink high-availability


    【解决方案1】:

    作业管理器的职责之一是监视任务管理器,并在发生故障时启动重新启动。当 JM 和 TM 位于不同的容器中时,这在容器化环境中运行良好;否则,您似乎是在自找麻烦。如果您打算扩大规模,将 TM 分开也很有意义,尽管这对您的情况可能没有实际意义。

    不过,可行的方法是使用 LocalExecutionEnvironment 运行作业(以便一切都在一个进程中——这有时称为 Flink 微型集群)。如果您愿意为此工作,这条路在我看来是可行的,但我不能推荐它。您必须以某种方式跟踪检查点,并安排容器在失败时从检查点重新启动。还有其他一些事情可能效果不佳——请参阅this question 了解详细信息。 LocalExecutionEnvironment 在设计时并未考虑到生产部署。

    我建议您探索的是,看看您可以在多大程度上使标准的、独立的容器解决方案变得负担得起。对于初学者,您应该能够以最少的资源运行 JM,因为它没有太多工作要做。

    【讨论】:

      【解决方案2】:

      查看operator,它可以自动执行在 Kubernetes 中部署和管理 Flink 的生命周期。该项目处于测试阶段,但您仍然可以了解如何操作或直接使用此运算符(如果它符合您的要求)。这里的 Job Manager 和 Task manager 是单独的 kubernetes 部署。

      【讨论】:

        最近更新 更多