我是 Flink 和 kubernetes 的新手。我计划创建一个 flink 流作业,将数据从文件系统流式传输到 Kafka。
有工作正常的 flink 作业罐(在本地测试(。现在我正在尝试在 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 旋转会话/作业集群的理想方法?什么是正常的CI CD过程?我应该首先构建会话集群并在需要时提交作业吗?还是用构建的罐子启动工作集群?
首先,您提供的链接是针对 Flink 1.5 的。如果你是重新开始,我建议使用 Flink 1.9 或即将推出的 1.10。
对于您的问题:
1( 带有文件监视器的作业永远不会终止。它无法知道何时没有更多文件到达,因此您必须手动取消它。作业群集对此很好。
2(对此没有明确的答案,也不是Flink特定的。每个人都有不同的解决方案,有不同的缺点。
我的目标是一种半自动的方法,其中一切都是自动的,但您需要明确按下部署按钮(而不仅仅是 git push(。通常,这些 CI/CD 管道首先在测试群集上部署,并在允许在生产环境中部署之前进行冒烟测试。
如果您完全新鲜,则可以检查 AWS 代码部署。但是,我在Gitlab和AWS运行器上取得了很好的体验。
正常过程如下所示:
- 建
- 构建计算机上的集成/E2E 测试(Dockerized(
- 在测试群集/预生产群集上部署
- 运行烟雾测试
- 在生产中部署
我还看到一些流程在生产中快速进行,并将时间投入到更好的监控和快速回滚上,而不是预生产集群和冒烟测试。这通常适用于业务非关键流程以及再处理的成本。