【发布时间】: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)。
问题
- 如何使用 Java 而不是数据流 shell 以编程方式通过 Spring Cloud Data Flow 按需启动任务? (是否有用于执行此操作的 Rest-API 或将在独立服务器上运行的简单 Java 程序也应该没问题)
- 如何以编程方式构建一个顺序管道,该管道对每个任务可以启动的 pod 数量有上限,并且具有依赖关系,以便只有在前一个任务完成处理所有输入后才能启动任务。
【问题讨论】:
标签: java kubernetes pipeline spring-cloud-dataflow