Kubernetes 上的可扩展春季批处理作业

Abh*_*hay 6 java spring-batch kubernetes spring-cloud

我正在使用 spring 批处理开发ETL批处理应用程序。我的 ETL 过程从一个基于分页的 REST API 获取数据并将其加载到 Google Big-query。我想在 kubernetes 集群中部署这个批处理应用程序,并希望利用 pod 可扩展性功能。我知道 Spring Batch 支持水平和垂直缩放。我有几个问题:-

1) 如何在 kubernetes 上部署这个 ETL 应用程序,以便它使用远程分块/远程分区按需创建 pod?

2) 我假设会有主主 Pod 和基于负载配置的不同从属 Pod。这是正确的吗?

3) 还有一个 kubernetes 批处理 API 也可用。使用 kubernetes 批处理 API 或使用 Spring Cloud 功能。哪个选项更好?

小智 4

我已将 Spring Boot 与 Spring Batch 和 Spring Cloud Task 一起使用来执行类似于您想要执行的操作。也许它会对你有所帮助。

它的工作方式是这样的:我有一个管理器应用程序,它使用我的主应用程序在 Kubernetes 上部署 Pod。主应用程序执行一些工作,然后启动远程分区,使用“workers”部署其他几个 Pod。

试图回答你的问题:

1) 您可以创建具有 Spring Batch 作业的应用程序的 docker 映像。我们称之为主应用程序。将部署主应用程序的应用程序可以使用来自Spring Cloud Deployer kubernetes 的TaskLauncher 或 AppDeployer

2)正确。在这种情况下,您可以使用远程分区。每个分区都是另一个带有作业的 docker 镜像。这将是你的工人。可以在此处找到远程分区的示例。

3)就我而言,我使用了 spring Batch 并设法完成了我需要的一切。我现在遇到的唯一问题是集群的升级和降级。由于我的工作人员没有状态,当从集群中删除实例时,我遇到了一些问题。如果您不需要扩大或缩小集群规模,那么就可以开始了。