Kestra:高性能、基于 Java 的编排平台


Kestra 是一个基于 Java 构建的事件驱动的编排和调度平台,它利用 YAML 进行工作流定义(您可以将其视为工作流的 Terraform)。

Kestra 可以简化计划和事件驱动的工作流程。通过将基础设施即代码最佳实践引入数据、流程和微服务编排,您可以构建可靠的工作流程并充满信心地管理它们。

只需几行代码,您就可以直接从 UI创建流程。借助用于定义编排逻辑的声明式 YAML 接口,业务涉众可以参与工作流创建过程。

大多数编排器都是用 Python 编写的,但我们选择 Java 是因为它的高性能和强大的生态系统来创建高可用和容错的编排器。该架构采用微服务方法专为大型部署而设计,其中每个组件都可以独立部署和扩展。对于小型部署,可以使用独立模式。

Kestra 的通信是异步的并且基于排队机制。

它利用 Micronaut 框架并提供两个运行器:

  • 一个使用数据库(JDBC)作为消息队列和资源存储,
  • 另一个使用 Kafka 作为消息队列和 Elasticsearch 作为资源存储。

该平台是完全可扩展的并且基于插件,为各种工作流任务、触发器和数据存储选项提供了丰富的插件集。

关键概念

  1. Flow是 Kestra 的主要组成部分。它是您的任务和编排逻辑的容器。
  2. Namespace用于提供逻辑隔离,例如分离开发和生产环境。命名空间就像文件系统上的文件夹 - 它们将流组织成逻辑类别,并且可以嵌套以提供层次结构。
  3. Tasks是流程中的原子操作。默认情况下,列表中的所有任务将按顺序执行,并可使用其他自定义选项并行运行任务或在需要时允许特定任务失败。
  4. Triggers定义流程何时运行。在 Kestra 中,流是根据事件触发的。此类事件的示例包括:
    • 定期的时间表 
    • API  调用(Webhook触发器)
    • 从UI临时执行 
    • 流触发器-可以使用流触发器或子流从其他流触发流,从而实现高度模块化的工作流。
    • 自定义事件,包括新文件到达(文件检测事件)、消息总线中的新消息、查询完成等。
  • Inputs允许您将运行时特定的变量传递给流程。它们是强类型的,并允许附加验证规则。

    Kestra 中的大多数任务都可以作为插件使用,但核心库中提供了许多类型的任务,包括支持各种编程语言(例如 Python、Node、Bash)的 ao 脚本任务以及编排打包到 Docker 容器中的业务逻辑的能力图片。

    丰富的编排能力
    Kestra 提供了各种任务来处理简单和复杂的业务逻辑,包括:

    • 子流
    • 重试
    • 暂停
    • 错误处理
    • 条件分支
    • 动态任务
    • 顺序任务和并行任务
    • 通过将标志设置disabled为,在需要时跳过任务或触发器true。
    • 配置任务、流程和触发器之间的依赖关系
    • 先进的调度和触发条件
    • 回填
    • 蓝图
    • 通过向任何组件添加 Markdown 描述来记录您的流程、任务和触发器
    • 添加标签以向流程添加其他元数据,

    可以直接从 UI 编写工作流程。编写工作流程时,UI 提供:

    • 自动完成
    • 语法验证
    • 嵌入式插件文档
    • 作为蓝图提供的示例流程
    • 拓扑视图(有向无环图中的依赖关系视图)会在您修改和添加新任务时实时更新。