Dagu vs Kestra

Dagu vs Kestra:同样的 YAML 思路,截然不同的占用。

Dagu 和 Kestra 都用 YAML 声明式地编写工作流,所以真正的选择在于运行时和依赖。Dagu 是一个自包含的单一二进制文件,调用你已有的命令。Kestra 在 JVM 上运行,背后有一个 database,并在其上提供庞大的插件目录。

调用你已有命令的工作流
name: nightly-ops
schedule: "0 2 * * *"

steps:
  - id: extract
    run: python scripts/extract.py

  - id: transform
    run: ./bin/transform
    retry_policy:
      limit: 3
    depends: [extract]

  - id: notify
    run: ./scripts/slack-success.sh
    depends: [transform]

无需运行 JVM 的单一二进制文件

无需运维外部 database 或 broker

面向 shell、Docker、HTTP、SSH、SQL、子工作流和 AI 智能体的 executor

支持 local、queue 和分布式模式

At a glance

Dagu vs Kestra 速览

运行时
Dagu

单一 Go 二进制文件,无 JVM。

Kestra

运行在 JVM 上的 Java 应用。

依赖
Dagu

仅本地文件,无外部 database 或 broker。

Kestra

核心需要 database;扩展需要 Kafka 和 Elasticsearch。

扩展步骤
Dagu

用内置 executor 直接调用命令。

Kestra

拥有 1400 多个插件的大型目录。

In depth

Where each tool fits

01

两款工具的共同点

Dagu 和 Kestra 都是声明式的。你用 YAML 编写工作流,在 git 中做版本管理,并在自己的基础设施上运行。差异体现在各自底层需要运行什么。

  • 可在 pull request 中评审的声明式 YAML 工作流
  • 用于查看运行、日志和历史的 Web UI
  • 自托管,数据留在你自己的环境中
02

Dagu 运维更轻的原因

Dagu 以一个用 Go 编写的二进制文件发布,状态保存在本地文件中。没有需要调优的 JVM,也没有需要维护的独立数据存储。Kestra 基于 Java 运行,核心需要一个 database,高可用部署还会加入 Kafka 和 Elasticsearch 等组件。

  • 由文件支撑的单一二进制文件,无需 JVM 和外部 database
  • 每个步骤运行它已经使用的命令、容器或脚本
  • 先在单台主机上起步,之后再迁移到 queue 或分布式 worker
03

何时改选 Kestra

如果你想要大规模的、以 UI 为中心的编辑体验和广泛的插件目录,Kestra 是很合适的选择。它的插件生态和背后的公司都比 Dagu 更大,这对某些团队很重要。

  • 你想要大量现成插件的目录,而不是直接调用命令
  • 你更喜欢用由 API 支撑的 UI 编辑器来构建和修改流程
  • 你在规划高可用平台,并且可以接受运维 Kafka 和 Elasticsearch

FAQ

Practical questions before adopting Dagu

Dagu 能取代 Kestra 吗?

对许多团队来说可以。如果你的工作流以命令、容器、HTTP 调用、SSH 任务或 SQL 的形式运行,Dagu 能以小得多的占用覆盖它们。如果你依赖 Kestra 庞大的插件目录或其大规模 UI 编辑器,Kestra 仍然更合适。

两者都用 YAML,实际差别在哪里?

YAML 的思路相似,差别在底层。Dagu 是一个无 JVM、无外部 database 的二进制文件;Kestra 基于 Java 运行,依赖 database,并为高可用加入 Kafka 和 Elasticsearch。

Dagu 的集成和 Kestra 一样多吗?

不一样。Kestra 拥有更大的插件目录和插件市场。Dagu 的内置 executor 较少,它期望你调用已有的命令、脚本和容器,而不是安装插件。

Next step

Start with one workflow.

Install Dagu, move one fragile script or agent task into YAML, and decide from a real run history.