EKS 上的智能集群

Flink cluster on EKS

我是Flink和kubernetes的新手。我打算创建一个 flink 流作业,将数据从文件系统流式传输到 Kafka。

有工作正常的 flink 作业 jar(在本地测试)。现在我正尝试在 kubernetes 中托管这项工作,并想在 AWS 中使用 EKS。

我已经阅读了有关如何设置 flink 集群的官方 flink 文档。 https://ci.apache.org/projects/flink/flink-docs-release-1.5/ops/deployment/kubernetes.html

我尝试使用 minikube 在本地设置它并启动会话集群并提交工作正常。

我的问题: 1)在作业集群和会话集群这两个选项中,由于作业是流式作业并且应该继续监视文件系统并且当有任何新文件进入时它应该将其流式传输到目的地,在这种情况下我可以使用作业集群吗?根据文档,作业集群是执行作业并在完成后终止的东西,如果作业在文件夹上有监视器,它会完成吗?

2) 我有一个构建 flink jar 的 Maven 项目,想知道在生产中使用这个 jar 来旋转 session/job 集群的理想方法吗?正常的 CI CD 流程是怎样的?我应该首先构建一个会话集群并在需要时提交作业吗?或使用构建的 jar 启动作业集群?

首先,您提供的 link 适用于 Flink 1.5。如果您是新手,我建议您使用 Flink 1.9 或即将推出的 1.10.

您的问题:

1) 带有文件监视器的作业永远不会终止。它不知道何时没有更多文件到达,因此您必须手动取消它。工作集群很适合。

2) 没有明确的答案,也不是 Flink 特定的。每个人都有不同的解决方案,有不同的缺点。

我的目标是半自动方法,其中一切都是自动的,但您需要明确按下部署按钮(而不仅仅是 git 推送)。通常,这些 CI/CD 管道首先部署在测试集群上,并在允许部署到生产环境之前进行冒烟测试。

如果你是完全新鲜的,你可以查看AWS codedeploy。但是,我在 Gitlab 和 AWS 运行ner 方面取得了很好的经验。

正常的流程是这样的:

  • 建设
  • integration/e2e 在构建机器上测试(dockerized)
  • 测试部署 cluster/preprod 集群
  • 运行 冒烟测试
  • 在产品上部署

我还看到了在生产上快速进行的流程,并将时间投入到更好的监控和快速回滚上,而不是预生产集群和冒烟测试。这对于非关键业务流程以及重新处理的成本通常是可行的。