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

Is it possible to run a single container Flink cluster in Kubernetes with high-availability, checkpointing, and savepointing?

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

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

上聚合事件

根据我对文档的阅读以及在 Google 上花费的时间,我没有发现任何似乎可以说明所考虑的内容是否真的可行的内容。

是否可以做这三件事中的任何一件:

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

(如果有人有更好的想法,我洗耳恭听。)

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

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

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

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