使用 Spring Cloud DataFlow 在无限运行的应用程序中编排长时间运行的外部批处理作业是不是合适?

Posted

技术标签:

【中文标题】使用 Spring Cloud DataFlow 在无限运行的应用程序中编排长时间运行的外部批处理作业是不是合适?【英文标题】:Is it sutable to use Spring Cloud DataFlow to orchestrate long running external batch jobs inside infinite running apps?使用 Spring Cloud DataFlow 在无限运行的应用程序中编排长时间运行的外部批处理作业是否合适? 【发布时间】:2018-11-29 06:57:31 【问题描述】:

我们有 String Batch 应用程序,每个应用程序中都定义了触发器。

每个 Batch 应用程序运行数十个具有不同参数的类似作业,并且能够以每个应用程序 1400 MiB 的速度执行此操作。

我们使用多年前已弃用的 Spring Batch Admin 来启动单个作业并简要了解作业中的情况。迁移指南建议将 Spring Batch Admin 替换为 Spring Cloud DataFlow。

Spring Cloud DataFlow 文档说从 Maven 存储库中获取 jar 并使用一些参数运行它。我不喜欢等待 20 秒的应用程序下载、2 分钟的应用程序启动以及所有安全/证书/防火墙问题(如何跨 Intranet 下载专有 jar?)。

我想通过 IP/端口在 Spring Cloud DataFlow 中注册现有应用程序,并将作业定义传递给 Spring Batch 应用程序并监视执行(包括停止作业的能力)。 Spring Cloud DataFlow 是否可用于此?

【问题讨论】:

【参考方案1】:

这里有几样东西要解压。这是一个尝试。

Spring Cloud DataFlow 文档说从 Maven 存储库中获取 jar 并使用一些参数运行它。我不喜欢等待 20 秒的应用程序下载、2 分钟的应用程序启动以及所有安全/证书/防火墙问题

是的,有一个应用程序解析过程。但是,一旦下载,我们将重用 Maven 缓存中的应用程序。

至于 2 分钟的引导窗口,取决于 Boot 和配置对象的数量,当然还有你的业务逻辑。也许你的情况就是 2 分钟。

如何跨 Intranet 下载专有 jar?

有一个选项可以通过 proxies 解析来自防火墙后托管的 Maven 工件的工件 - 我们在此模型上拥有用于专有 JAR 的用户。

每个 Batch 应用程序运行数十个具有不同参数的类似作业,并且能够以每个应用程序 1400 MiB 的速度执行此操作。

您可能需要考虑Composed Task 功能。它不仅提供了将子任务作为直接无环图启动的能力,而且还允许基于每个节点的退出代码进行转换,以进一步拆分和分支以启动更多任务。当然,所有这些都会在每个执行级别自动记录,以便从 SCDF 仪表板进行进一步跟踪和监控。

我想通过 IP/端口在 Spring Cloud DataFlow 中注册现有应用程序,并将作业定义传递给 Spring Batch 应用程序并监控执行(包括停止作业的能力)。

就批处理作业被包装到 Spring Cloud Task Apps 中而言,是的,您可以在 SCDF 中注册它们并在 DSL 中使用它,或者将它们拖放到可视画布中,以创建连贯的数据管道。我们有一些“作为任务的批处理”示例here 和here。

【讨论】:

以上是关于使用 Spring Cloud DataFlow 在无限运行的应用程序中编排长时间运行的外部批处理作业是不是合适?的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Cloud Dataflow 中引用属性

需要有关如何在多个专用服务器中创建部署 spring-cloud-dataflow 应用程序以创建流的建议

Spring Cloud DataFlow 组合任务未启动

我们如何在 Spring cloud dataflow kafka binder 中为 Kafka 维护租户数据隔离?

Spring Cloud Dataflow - 处理任务中的参数

使用 Spring Cloud DataFlow 在无限运行的应用程序中编排长时间运行的外部批处理作业是不是合适?