java - EKS 上的 Flink 集群

标签 java amazon-web-services kubernetes apache-flink amazon-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 在本地进行设置,并启动 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/

相关文章:

amazon-web-services - AWS VPC - 互联网网关与 NAT

javascript - 如何获取 CloudWatch 代理和指标过滤器以报告维度

kubernetes - 使用 eureka 与 kubernetes 进行服务发现的缺点

java - 在命令行上选择测试类别

java - 在 IBM Websphere AppServer 上使用 Java Servlet 2 构建 Comet 应用程序是多么正确的方法

amazon-web-services - Flink 作业无法获取 EC2 IAM 角色

cassandra - 将 Kubernetes 外部的 Datastax 连接到 Kubernetes 中的 Cassandra 集群

Kubernetes 动态 Pod 配置

java - FileReader#mark() 抛出 java.io.IOException

Java 如何将menuBar添加到JFrame而不破坏我的布局