点击上方蓝字关注我们
IT 咖啡馆,探索无限可能!
恭喜你发现了这个宝藏,这里你会发现优质的开源项目、IT知识和有趣的内容。
在平时的工作中,我们经常需要把一系列的工作连续做完,才可以真正的完成一件事情,比如下载内容、填写表单再发送邮件,这就比较场景的工作流。
今天我们分享的开源项目,它是一个开源的事件驱动编排平台,可以帮助介入上百种工具,然后构建出自己的高效工作流,它就是:Kestra
Kestra 是什么?
Kestra 是一个开源的事件驱动编排平台,可让计划和事件驱动的工作流程变得简单。通过将基础设施即代码最佳实践引入数据、流程和微服务编排,您只需几行 YAML 即可直接从 UI构建可靠的工作流程。
Kestra的名称源自“编排”一词,该公司认为市场上充斥着满足特定需求的工具,如自动化数据管道、信息技术任务管理、流程协调和服务提供。然而,这些工具往往将组件分隔开来,需要连接器才能协同工作。
Kestra让工程师在不到五分钟内使用工作流程设计引擎构建和编排数据或流程工作流程,并能直接集成到工程师每天使用的工具中。
目前已支持500多个集成,包括AWS、GCP、Azure、Terraform、Docker、GitHub、Databricks和Snowflake的连接器。以下是 支持的一些特性:
主要特点:
一切以代码为本:为代码通过Git 版本控制集成将工作流程保留,即使是从 UI 构建它们也是如此。
事件驱动和计划的工作流:计划实时
trigger
通过简单的定义自动化和事件驱动的工作流。声明性 YAML 接口:使用内置代码编辑器中的简单配置定义工作流。
丰富的插件生态系统:可以从任何数据库、云存储或 API中提取数据,以任何语言运行脚本内置数百个插件。
直观的用户界面和代码编辑器:通过语法突出显示、自动完成和实时语法验证直接从用户界面构建和可视化工作流程。
可扩展:设计用于处理数百万个工作流程,具有高可用性和容错能力。
版本控制友好:从内置代码编辑器编写您的工作流程,并直接从 Kestra 将它们推送到您喜欢的 Git 分支,从而实现 CI/CD 管道和版本控制系统的最佳实践。
结构和弹性:使用命名空间、标签、子流、重试、超时、错误处理、输入、在 UI 中生成工件的输出、变量、条件分支、高级调度、事件触发器、回填、动态任务、顺序和并行任务来驯服混乱并为您的工作流带来弹性,并通过将标志设置为在需要时跳过任务或触发器
Kestra 的架构
Kestra 的架构被设计为可扩展、灵活且容错。根据您的需求,您可以选择两种不同的架构: JDBC和Kafka 。
下图显示了使用 JDBC 后端的 Kestra 的主要组件。这种方式稍微简单一些,也更容易理解。
以下是各个组件及其相互作用:
JDBC 后端:这是用于编排元数据的数据存储层。
服务器:这是系统的核心部分,由以下部分组成:
Web 服务器:提供 API 和用户界面。
调度程序:系统的重要部分,负责安排工作流并处理除流触发器之外的所有触发器(见下文)。
执行器:另一个关键组件,负责包括流触发器在内的编排逻辑。
Worker:这可能是一个或多个执行可运行任务和轮询触发器的繁重计算的进程。出于隐私原因,Worker 是唯一与用户基础设施(包括内部存储和外部服务)交互的组件。
用户:通过 UI 和 API 与系统交互。
用户基础设施:作为用户环境一部分的私有基础设施组件,Kestra 与这些组件进行交互:
内部存储:可以是用户基础设施内的任何云存储系统(例如 AWS S3、Google Cloud Storage 或 Azure Blob Storage)。
外部服务:Kestra 之外的第三方 API 或服务,Worker 可能会与之交互以处理给定任务中的数据。
安装 Kestra
kestra提供了在线的demo环境,可以在开始前先去上面体验一下项目的功能。
https://demo.kestra.io/ui/login?auto
另外Kestra可以部署在任何云上、本地或者使用Docker在笔记本电脑上。
Docker方式
在本地运行最简单的方式就是通过docker,直接执行以下命令即可:
docker run --pull=always --rm -it -p 8080:8080 --user=root \\
-v /var/run/docker.sock:/var/run/docker.sock \\
-v /tmp:/tmp kestra/kestra:latest server local
Jar包方式
如果你不想使用Docker的方式来运行,那你还可以下载项目提供的Jar包,当然这种方式就需要依赖Java环境,你需要确保安装好Java,然后直接执行启动:
./kestra-VERSION <command>
使用 Kestra
工作流类的产品使用起来都会稍微有一些复杂性,毕竟里面涉及到的内容会偏多一些,这里就用简单的helloworld示例来作一下说明。
点击左侧菜单中的flow,然后单击“创建”按钮并粘贴以下配置以创建您的第一个flow:
id: getting_started
namespace: company.team
tasks:
- id: hello_world
type: io.kestra.plugin.core.log.Log
message: Hello World!
单击“保存” ,然后单击“执行”按钮开始第一次执行。
这样就可以执行这个flow了
然后我们就来看几个Kestra的概念
流程
流程
流程以声明性 YAML 语法定义,以保持编排代码的可移植性和与语言无关性。
每个流程由三个必需组件组成:id
和:namespacetasks
id
表示流的名称namespace
可用于分离开发和生产环境tasks
是将按定义顺序执行的任务列表
YAML 文件中的这三个组件如下:
id: getting_started
namespace: company.team
tasks:
- id: hello_world
type: io.kestra.plugin.core.log.Log
message: Hello World!
流的id
必须在命名空间内唯一。例如:
getting_startedcompany.team1getting_startedcompany.team2
✅ 您可以有一个在命名空间中命名的流,并有另一个在命名空间中命名的流。❌您不能同时在命名空间
getting_startedcompany.team
中拥有两个流。
id
和的组合namespace
可作为流的唯一标识符。
命名空间
命名空间用于对流进行分组并提供结构。请记住,流到命名空间的分配是不可变的。一旦创建了流,您就无法更改其命名空间。如果您需要更改流的命名空间,请使用所需的命名空间创建新流并删除旧流。
标签
要添加另一层组织,您可以使用标签,从而允许使用键值对流进行分组。
描述
您可以选择添加描述属性以记录您的流程。这是一个支持Markdowndescription
语法的字符串。该 Markdown 描述将在 UI 中呈现和显示。
任务
任务是流程中的原子操作。您可以将任务设计得小而细,例如从 REST API 获取数据或运行自包含的 Python 脚本。但是,任务也可以表示大型而复杂的流程,例如触发容器化流程或长时间运行的批处理作业(例如使用 dbt、Spark、AWS Batch、Azure Batch 等)并等待它们完成。
任务以列表的形式定义。默认情况下,列表中的所有任务将按顺序执行— 一旦第一个任务成功完成,第二个任务就会开始。
Kestra 中的任务必须具有id
和type
。其他属性取决于任务类型。您可以将任务视为流程中的一个步骤,该步骤应执行特定操作,例如在 Docker 容器中运行 Python 或 Node.js 脚本,或从数据库加载数据。
tasks:
id: python
type: io.kestra.plugin.scripts.python.Script
containerImage: python:slim
script: |
World!")
支持的任务类型
让我们看看支持的任务类型。
Core:core 别中的核心任务io.kestra.plugin.core.flow
通常用于控制流程逻辑。您可以使用它们来声明哪些流程应并行运行或按顺序运行。您可以指定条件分支、迭代项目列表、暂停或允许某些任务失败而不会导致执行失败。
脚本:脚本任务用于在 Docker 容器或本地进程中运行脚本。您可以使用它们来运行 Python、Node.js、R、Julia 或任何其他脚本。您还可以使用它们在 Shell 或 PowerShell 中执行一系列命令。查看脚本任务页面了解更多详细信息。
内部存储:类别中的任务io.kestra.plugin.core.storage
以及输出用于与内部存储进行交互。Kestra 使用内部存储在任务之间传递数据。您可以将内部存储视为 S3 存储桶。事实上,您可以将私有 S3 存储桶用作内部存储。此存储层有助于避免连接器的激增。例如,您可以使用 Postgres 插件从 Postgres 数据库中提取数据并将其加载到内部存储。其他任务可以从内部存储读取该数据并将其加载到其他系统(如 Snowflake、BigQuery 或 Redshift),或者使用任何其他插件对其进行处理,而无需在它们之间建立点对点连接。
KV 商店:内部存储主要用于在单个流程执行中传递数据。如果您需要在不同的流程执行之间传递数据,则可以使用KV存储。类别中的任务允许您在执行之间(甚至跨命名空间)保留数据。例如,如果您使用dbt,则可以利用 KV 存储在执行之间保留文件并实现精简 CI 模式。
插件:除了核心任务之外,插件库还提供广泛的集成。Kestra 具有用于数据提取、数据转换、与数据库交互、对象存储或消息队列的内置插件,并且随着每个新版本的发布,列表不断增长。除此之外,您还可以创建自己的插件以与任何系统或编程语言集成。
融资
另外项目所在的公司最近宣布自己刚刚获得了800万美元的种子轮融资,这也是一个开源项目发展的重要里程碑,有了资金的支持可以更快在产品和商业化有所作为。
总结
总的来说 我觉得kestra 的思路是非常不错的,将日常工作的中的多种工作流进行整合,并且实现更多联动和自动化的任务,这是一个很让期待的事情。但是也必须要说一句,真正做过工作流相关内容的人都知道,工作流最大的麻烦就在于不确定性和变化性,这些都会给产品带来巨大的风险和大量对接性工作,这也是工作流产品很难有特别让人满意表现的一个原因。希望这个开源的项目能够找到更好的结局方式。
项目信息
项目名称:kestra
GitHub 链接:https://github.com/kestra-io/kestra
Star 数:12K