是否可以在 Kubernetes 中运行具有高可用性、检查点和保存点的单个容器 Flink 集群?



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

随着我们努力增加更多工作岗位,我们希望改进我们的部署和集群管理策略。 我们正在考虑迁移到使用作业集群,但是对将生成的容器数量有所保留。 每个作业一个容器不是问题,但每个作业两个容器(1 JM 和 1 TM(会引起内存消耗问题。 一些作业需要高可用性,并且能够在窗口聚合事件时使用检查点和从/获取保存点进行还原。

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

是否可以执行以下三件事中的任何一项:

  1. 将 JobManager 和 TaskManager 作为单独的进程在同一容器中运行,并将它们用作 Flink 集群,或者
  2. 将作业管理器和任务管理器作为字面上相同的进程运行,或者
  3. 将作业作为独立 JAR 运行,能够从/获取检查点,并能够获取保存点并从该保存点还原?

(如果有人有更好的想法,我全听。

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

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

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

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

最新更新