我是 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 在本地进行设置,并启动 session 集群并提交了工作正常的作业。
我的问题: 1)在作业集群和 session 集群这两个选项中,由于作业是流式作业,并且应该持续监视文件系统,并且当任何新文件进入时,它应该将其流式传输到目的地,在这种情况下我可以使用作业集群吗?根据文档,作业集群是执行作业并在完成后终止的东西,如果作业在文件夹上有监视器,它会完成吗?
2)我有一个构建 flink jar 的 Maven 项目,想知道在生产中使用此 jar 来旋转 session /作业集群的理想方法吗?正常的 CI CD 流程是怎样的?我应该首先构建一个 session 集群并在需要时提交作业吗?或者使用构建的 jar 来启 Action 业集群?
最佳答案
首先,您提供的链接适用于 Flink 1.5。如果您是新手,我建议您使用 Flink 1.9 或即将推出的 1.10。
对于您的问题:
1) 使用文件监视器的作业永远不会终止。它无法知道何时不再有文件到达,因此您必须手动取消它。作业集群非常适合这一点。
2)对此没有明确的答案,而且它也不是 Flink 特定的。每个人都有不同的解决方案,也有不同的缺点。
我的目标是采用半自动方法,其中一切都是自动的,但您需要明确地按下部署按钮(而不仅仅是 git 推送)。通常,这些 CI/CD 管道首先部署在测试集群上,并在允许部署到生产环境之前进行冒烟测试。
如果您完全陌生,您可以查看 AWS codedeploy 。不过,我在 Gitlab 和 AWS runner 方面获得了很好的体验。
正常的流程是这样的:
- 构建
- 构建机器上的集成/e2e 测试(docker 化)
- 部署在测试集群/预生产集群上
- 运行冒烟测试
- 部署在产品上
我还看到了在生产上快速运行的流程,并将时间投入到更好的监控和快速回滚上,而不是预生产集群和冒烟测试。对于业务不关键的流程以及重新处理的昂贵程度来说,这通常是可行的。
关于java - EKS 上的 Flink 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59650173/