【问题标题】:Spring Cloud Data Flow : Programmatical Orchestration of TasksSpring Cloud 数据流:任务的编程编排
【发布时间】:2021-05-10 09:29:41
【问题描述】:

背景

我有 Spring Cloud Data Flow Server 作为 Pod 在 Kubernetes 中运行。我可以从SCDF server UI 仪表板启动任务。我希望开发一个更复杂、更真实的任务管道用例。

我不想使用 SCDF UI 仪表板,而是想从标准 Java 应用程序启动任务的顺序列表。考虑以下任务管道:

任务 1: 从数据库中读取作为任务参数输入接收的唯一 ID 的数据并执行扩充。丰富的记录被写回数据库。一个任务实例的执行负责处理一个唯一的id。

任务 2: 读取步骤 1 写入的丰富数据,获取作为任务参数输入接收的唯一 ID,并生成报告。一个任务实例的执行负责为一个唯一的 id 生成报告。

从上面的解释应该清楚,Task 1 和Task 2 是连续的步骤。假设输入数据库包含 50k 个唯一 ID。我想开发一个协调器 Java 程序,它将启动任务 1,限制为 40。(即任务 1 在任何给定时间只能运行 40 个 pod。任何为任务 1 启动更多 pod 的请求都应该等待) .一旦通过 Task 1 实例处理了所有 50k 个唯一 ID,然后才能启动 Task 2 pod。

到目前为止我发现了什么

通过文档,我发现了一个名为CompositeTaskRunner 的东西。但是,这些示例显示了在 shell/cmd 窗口上触发的命令。我想做类似的事情,但不是打开数据流 shell 程序,而是想将参数传递给可以在内部启动任务的 Java 程序。这使我可以轻松地将我的应用程序与知道如何与 Java 代码集成的遗留代码集成(通过按需启动应该启动一组任务并等待它们完成的 Java 程序或通过调用 Rest API)。

问题

  1. 如何使用 Java 而不是数据流 shell 以编程方式通过 Spring Cloud Data Flow 按需启动任务? (是否有用于执行此操作的 Rest-API 或将在独立服务器上运行的简单 Java 程序也应该没问题)
  2. 如何以编程方式构建一个顺序管道,该管道对每个任务可以启动的 pod 数量有上限,并且具有依赖关系,以便只有在前一个任务完成处理所有输入后才能启动任务。

【问题讨论】:

    标签: java kubernetes pipeline spring-cloud-dataflow


    【解决方案1】:

    请查看Java DSL 对任务的支持。

    您可以使用这种流畅风格的 API 来编排具有顺序/并行执行的任务。 [例如:.definition("a: timestamp && b:timestamp")]

    通过将其定义为 Java 代码,您将能够构建、启动或安排启动这些有向图。我们看到许多客户采用这种方法进行端到端验收测试和部署自动化。

    [添加]

    此外,您还可以扩展continuous deployments 的编程任务定义。

    【讨论】:

    • 这确实为我指明了正确的方向;但是,我不能再启动同一任务的多个实例。我在此发布了new question。很想听听您的意见。
    猜你喜欢
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2018-11-27
    • 2019-07-29
    • 1970-01-01
    • 2018-05-25
    相关资源
    最近更新 更多