kestra-io / kestra

kestra-io/kestra

open_in_new前往仓库

面向关键任务应用的事件驱动编排与调度平台

项目概览

项目概述

Kestra 是一个开源的事件驱动编排与调度平台,专为关键任务应用设计。它通过声明式的 YAML 接口统一了定时调度和事件驱动自动化,并将基础设施即代码(Infrastructure as Code)的最佳实践引入数据、流程和微服务管道。Kestra 支持从 UI 直接构建工作流,同时保持工作流以代码形式管理,并集成了 Git 版本控制。

核心功能

  • 一切皆代码,亦可从 UI 操作:即使从 UI 构建工作流,也能通过 Git 版本控制集成保持工作流以代码形式管理。
  • 事件驱动与定时工作流:通过简单的 trigger 定义,自动化定时和实时事件驱动的工作流。
  • 声明式 YAML 接口:在内置代码编辑器中用简单的配置定义工作流。
  • 丰富的插件生态:内置数百个插件,可从任何数据库、云存储或 API 提取数据,并支持以任何语言运行脚本。
  • 直观的 UI 与代码编辑器:支持语法高亮、自动补全和实时语法验证,可直接在 UI 中构建和可视化工作流。
  • 可扩展性:设计用于处理数百万个工作流,具备高可用性和容错能力。
  • 版本控制友好:从内置代码编辑器编写工作流,并直接推送到 Git 分支,支持 CI/CD 最佳实践。
  • 结构与韧性:通过命名空间、标签、子流程、重试、超时、错误处理、输入、输出、变量、条件分支、高级调度、事件触发器、回填、动态任务、顺序和并行任务等功能,为工作流带来秩序和韧性。

适用与不适用场景

适用场景:

  • 数据管道编排(ETL/ELT)
  • 基础设施自动化(InfraOps)
  • 事件驱动的实时处理(如文件到达、消息队列事件)
  • 跨云服务(AWS、GCP、Azure)的集成与自动化
  • 需要高可用和容错的关键任务工作流
  • 需要版本控制和 CI/CD 集成的工作流管理

不适用场景:

  • 需要实时、低延迟(毫秒级)的微服务间通信(Kestra 更侧重于工作流编排而非服务间调用)
  • 作为通用编程语言运行时(Kestra 是编排平台,不是应用服务器)
  • 需要复杂状态机或长时间运行的有状态流程(Kestra 的工作流通常是无状态或通过外部存储管理状态)

技术架构与依赖

  • 主要语言:Java
  • 许可证:Apache-2.0
  • 架构:事件驱动编排平台,支持高可用和容错。
  • 依赖:Docker(用于本地运行和任务执行)、Kubernetes(可选,用于任务运行)、各种云服务 SDK(AWS、GCP、Azure)、消息队列(Kafka、Redis、Pulsar 等)、数据库(通过插件支持)。
  • 监控:使用 Micrometer 库暴露 Prometheus 指标,遵循 OpenMetrics 1.0 格式。

安装与快速开始

本地 Docker 快速启动

确保 Docker 已运行,然后执行以下命令启动 Kestra:

docker run --pull=always -it -p 8080:8080 --user=root \
  --name kestra --restart=always \
  -v kestra_data:/app/storage \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /tmp:/tmp \
  kestra/kestra:latest server local

访问 http://localhost:8080 打开 Kestra UI。

第一个 Hello World 流程

在 UI 中创建一个新流程,内容如下:

id: hello_world
namespace: dev

tasks:
  - id: say_hello
    type: io.kestra.plugin.core.log.Log
    message: "Hello, World!"

运行流程并查看输出。

典型使用方法

创建定时工作流

id: scheduled_flow
namespace: prod
triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "0 9 * * *"
tasks:
  - id: run_script
    type: io.kestra.plugin.scripts.python.Script
    script: |
      print("Hello from scheduled flow!")

事件驱动工作流(监听文件到达)

id: file_trigger_flow
namespace: prod
triggers:
  - id: watch
    type: io.kestra.plugin.core.trigger.File
    directory: "/tmp"
    action: MOVE
tasks:
  - id: process_file
    type: io.kestra.plugin.core.log.Log
    message: "File {{ trigger.uri }} arrived!"

使用插件调用外部 API

id: api_call_flow
namespace: dev
tasks:
  - id: call_api
    type: io.kestra.plugin.core.http.Request
    uri: "https://api.example.com/data"
    method: GET

配置与部署要点

  • 部署选项:支持 Docker、Docker Compose、Podman、Kubernetes、AWS(CloudFormation)、GCP(Terraform)、Azure 等。
  • 高可用:Kestra 设计为可水平扩展,支持多实例部署以实现高可用。
  • 存储:默认使用本地存储(/app/storage),生产环境建议配置外部存储(如 S3、GCS)。
  • 数据库:Kestra 需要数据库存储元数据,默认使用 H2,生产环境建议使用 PostgreSQL 或 MySQL。
  • 监控:通过 Micrometer 暴露 Prometheus 指标,可集成 Grafana 等监控工具。
  • 版本控制:可将工作流存储在 Git 仓库中,并通过 CI/CD 管道自动部署。
  • Terraform Provider:官方提供 Terraform Provider 管理 Kestra 资源。

限制、风险与许可证

  • 限制:
    • 工作流定义基于 YAML,对于复杂逻辑可能需要额外脚本支持。
    • 插件生态虽丰富,但特定需求可能需要自定义插件开发。
    • 实时事件处理依赖外部消息系统,配置复杂度较高。
  • 风险:
    • 作为开源项目,社区支持依赖贡献者,商业支持需通过 Kestra Technologies 获取。
    • 版本更新可能引入破坏性变更,需关注发布说明。
  • 许可证:Apache-2.0,允许自由使用、修改和分发。

官方链接

信息来源和分析时间

  • 信息来源:GitHub 仓库 README、文档(METRICS_GUIDELINES.md)、最新发布信息。
  • 分析时间:2026-07-28(基于最新发布版本日期)。