使用Airflow在k8s集群上轻松搭建企业级工作流

概述

Apache Airflow 是一个开源的工作流管理平台,用于编写、调度和监控工作流(Workflows)。它最初由 Airbnb 开发,并于 2016 年捐赠给 Apache 软件基金会。Airflow 的核心理念是通过代码来定义工作流,使得工作流的管理和维护更加灵活和可扩展, github社区地址见链接

整体架构

在这里插入图片描述

Apache Airflow的架构主要包括以下核心组件:

  1. Scheduler(调度器):负责根据定义的DAG(Directed Acyclic Graph,有向无环图)图,计划和触发任务的执行。调度器将任务按照依赖关系组织成可执行的工作流程,并将其分发给可用的执行器。
  2. Executor(执行器):执行器负责执行调度器分发的任务。Airflow支持多种执行器,包括本地执行器(SequentialExecutor)、Celery执行器和Dask执行器等。执行器将任务实际执行在相应的工作节点上,并将执行结果返回。
  3. Web Server(Web服务器):提供Web用户界面,用于监控和管理工作流的状态、任务的执行情况、查看日志以及触发任务的手动运行等。通过Web界面,用户可以直观地了解工作流的整体情况。
  4. Database(元数据库):元数据库存储了Airflow的元数据,包括DAG的定义、任务实例的状态、任务执行日志等。这允许用户在不同的任务和工作流之间共享信息,并支持任务的重试、回溯和监控。
  5. Worker(工作节点):执行器通过工作节点在集群或计算资源上执行任务。工作节点可以是单个服务器或集群,具体取决于所选的执行器类型。

容器部署airflow方式

手动部署

手动部署可以参考Airflow官方教程,这里面介绍了怎么通过helm chart进行airflow部署,这里就不再详述了。不过由于docker.io被墙了,部署的时候需要想办法把海外的镜像拉取下来,或者直接部署到海外地域的集群中。

计算巢一键部署

计算巢提供了免费的airflow社区版服务,支持一键部署,既可以部署到已有容器集群,也支持新建容器集群,同时镜像也都使用的阿里云托管的镜像,不会存在镜像拉取不下来的问题,具体部署方式可以查看服务中的部署文档。

使用方式

Dags文件加载到scheduler调度器中

上面在k8s集群上部署好airflow以后,那么怎么运行我们定义好的DAG工作流呢,这里面主要有三种方式:

  1. 配置git仓库同步,从git仓库中加载要运行的Dags文件,这是最推荐的方式,可以很容易的更新要运行的Dags文件,计算巢部署版本默认使用这种方式,需要在Values.yaml中配置对应的git-sync配置。
  2. 在airflow-scheduler pod中对应airflow容器中,直接copy或者写入要执行的Dags文件,这种方式更适合临时测试
  3. 直接将Dags文件放到对应的pvc里,然后挂载到airflow-scheduler pod中对应airflow容器,这种使用起来也不太方便。

下面我们主要介绍第一种方式,使用git仓库去做同步, 我们可以把写好的DAG文件提交到git仓库中,然后airflow-scheduler组件会进行同步, web上就能看到我们定义好的DAG文件,然后点击run按钮就可以运行DAG文件了。在计算巢服务实例部署中,部署的时候需要填入对应的git仓库信息,手动部署的情况下需要手动修改对应的values.yaml,对helm chart做升级部署。

示例演示

下面以一个简单的DAG文件为例,展示如何在airflow中进行运行DAG。

  1. 在git仓库中创建DAG文件,文件名为hello_world_dag.py,里面有三个任务,会依次执行:
  • 打印"Hello"
  • 打印"World"
  • 休眠300秒
import time
from datetime import timedelta

from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.utils.dates import days_ago

# 定义默认参数
default_args = {
    'owner': 'airflow',              # DAG 的所有者
    'start_date': days_ago(1),       # DAG 的开始时间(1 天前)
    'retries': 1,                    # 任务失败时的重试次数
    'retry_delay': timedelta(minutes=5),  # 重试间隔
}

# 定义 DAG 对象
with DAG(
    dag_id='hello_world_dag',        # DAG 的唯一标识符
    default_args=default_args,       # 使用默认参数
    schedule_interval='@daily',      # 每天运行一次
    catchup=False,                   # 是否补跑历史任务
) as dag:

    # 定义第一个任务:打印 "Hello"
    def print_hello():
        print("Hello")

    task_hello = PythonOperator(
        task_id='print_hello',        # 任务的唯一标识符
        python_callable=print_hello,  # 调用的 Python 函数
    )

    // 定义第二个任务:打印 "World"
    def print_world():
        print("World")

    task_world = PythonOperator(
        task_id='print_world',
        python_callable=print_world,
    )

    # 定义一个休眠任务
    def sleep_task():
        print("Task is sleeping for 300 seconds...")
        time.sleep(300)  # 休眠 300 秒
        print("Task woke up!")

    sleep_operator = PythonOperator(
        task_id='sleep_task',
        python_callable=sleep_task,
    )

    # 设置任务依赖关系
    task_hello >> task_world >> sleep_operator
  1. 提交DAG文件到git仓库中,然后去web端查看,可以看到对应的DAG,这个过程会有延时,默认是每10s同步一次。
  2. 执行这个DAG,点击run按钮,点击进行,可以看到执行记录,点击Graph, 可以看到具体执行步骤,
    可以看到print_hello和print_world都已经执行完了,sleep_task还在执行中,这个功能确实很强大。

  3. 点击还在执行中的sleep_task,可以在Logs里看到输出信息,里面输出了会sleep 300秒,可见在正常执行。

总结

通过上面这个示例,可以看出airflow整体功能还是很强大的,并且图形化做的很好,交互能力很强大,可以直接在页面上进行Dag运行,并且可以清楚的看到DAG的执行情况,并且将每一步的执行过程都以图形化的方式显示出来,里面还有执行时间和日志,用来做工作流还是很好用的。
同时Dag支持python直接进行编码,也提供了很强的扩展性,在工作流中可以做各种业务操作,整体来说还是非常强大的。

<think>好的,用户现在问的是推荐一个开源的工作流系统。我需要先回顾之前的对话历史,看看用户之前问过什么问题,可能有什么潜在的需求。之前用户问的是大数据分析,我详细介绍了相关技术和工具,包括Hadoop、Spark、Flink这些,还有应用场景和流程。现在用户转向工作流系统,可能是在构建数据处理流程时需要自动化或编排工具。 首先,我需要明确工作流系统的定义和用途。工作流系统用于自动化、管理和监控业务流程或数据处理任务,比如定期运行ETL任务、机器学习模型训练、数据处理流水线等。在之前的大数据分析介绍中,我提到了处理流程包括数据采集、清洗、存储、建模和可视化,这些步骤可能需要工作流系统来协调。 接下来,用户可能需要一个开源解决方案,可能用于企业级应用或者个人项目。开源工作流系统有很多选择,我需要推荐几个主流且活跃的项目,同时考虑它们的特性、适用场景和社区支持。还要注意用户的技术栈,比如他们可能已经使用了Hadoop或Spark,所以需要兼容这些生态系统的工具。 用户可能的需求包括:易用性、可扩展性、社区支持、集成能力、监控和调度功能等。需要比较不同的系统,比如Apache Airflow、Apache DolphinScheduler、Argo Workflows、Camunda等,每个系统有不同的侧重点,比如Airflow适合数据工程,Camunda适合BPMN流程,Argo适合Kubernetes环境。 另外,用户可能不太清楚工作流系统和大数据处理框架的区别,可能需要简要说明。比如,工作流系统更关注任务编排和调度,而Spark或Flink是处理计算任务的引擎。工作流系统可以协调多个任务,处理依赖关系,重试失败任务,监控执行状态等。 还要考虑用户的使用场景,如果他们是在云原生环境(比如Kubernetes),那么Argo Workflows可能更合适;如果是传统的数据工程,Airflow可能更合适。同时,用户可能需要可视化界面,或者代码定义工作流的能力。 最后,我需要以结构化的方式呈现推荐,包括各个系统的核心特性、适用场景、技术栈和入门示例,帮助用户根据自身需求选择最合适的工具。同时,可能需要给出学习路径或资源链接,方便用户进一步了解。</think>--- ### **开源工作流系统推荐** --- #### **1. Apache Airflow** **核心定位**:数据工程领域的**工作流编排**标杆 **推荐指数**:★★★★★ | **关键特性** | **技术细节** | |---------------------------|--------------------------------------| | 可视化DAG设计器 | 基于Python代码定义任务依赖关系 | | 丰富的执行器支持 | Celery/Kubernetes Executor | | 强大的调度系统 | Cron表达式 + 增量调度策略 | | 插件生态系统 | 300+官方/社区插件(Hadoop/Spark等集成) | **适用场景**: - 定期ETL数据处理流水线 - 机器学习模型训练调度 - 跨系统任务协调(如数据库迁移+API调用) **入门示例**: ```python from airflow import DAG from airflow.operators.python import PythonOperator from datetime import datetime def print_hello(): print("Hello Airflow!") with DAG( 'demo_dag', start_date=datetime(2023, 1, 1), schedule_interval='@daily' ) as dag: task = PythonOperator( task_id='hello_task', python_callable=print_hello ) ``` --- #### **2. Apache DolphinScheduler** **核心定位**:**可视化低代码**工作流平台 **推荐指数**:★★★★☆ | **关键特性** | **技术细节** | |---------------------------|--------------------------------------| | 拖拽式界面设计 | 无需编写代码即可构建复杂流程 | | 多租户权限管理 | 支持LDAP/SSO集成 | | 分布式任务队列 | Master-Worker架构支持水平扩展 | | 告警通知体系 | 邮件/钉钉/企业微信集成 | **适用场景**: - 需要快速搭建可视化调度系统的团队 - 混合云环境下的多集群任务管理 - 敏感操作的权限分级控制 **架构优势**: ```mermaid graph TB subgraph Master A[API Server] --> B[Scheduler] B --> C[Alert Server] end subgraph Worker D[Task Executor] --> E[Log Server] end F[MySQL] --> A G[Zookeeper] --> B ``` --- #### **3. Argo Workflows** **核心定位**:**云原生**工作流引擎 **推荐指数**:★★★★★ | **关键特性** | **技术优势** | |---------------------------|------------------------------------| | Kubernetes原生支持 | 直接使用YAML定义工作流 | | 动态任务编排 | 支持循环、条件分支等复杂逻辑 | | 资源利用率优化 | 自动伸缩Pod减少闲置成本 | | 与CI/CD深度集成 | 完美衔接Tekton/JenkinsX等工具链 | **典型应用**: - 机器学习流水线(Kubeflow底层引擎) - 持续部署自动化(蓝绿发布/金丝雀发布) - 高性能计算任务调度 **示例YAML**: ```yaml apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: hello-world- spec: entrypoint: main templates: - name: main container: image: docker/whalesay:latest command: [cowsay] args: ["Hello Argo!"] ``` --- #### **4. Camunda** **核心定位**:**业务流程管理(BPMN)** 专家 **推荐指数**:★★★★☆ | **核心能力** | **业务价值** | |---------------------------|----------------------------------| | BPMN 2.0标准支持 | 精确建模复杂业务流程 | | 用户任务管理 | 人工审批节点集成 | | 流程监控看板 | 实时追踪KPI(周期时间/瓶颈点) | | 与微服务架构融合 | 通过REST API触发流程 | **行业案例**: - 银行信贷审批流程自动化 - 保险理赔处理系统 - 制造业工单派发系统 --- ### **选型对比表** | 维度 | Airflow | DolphinScheduler | Argo Workflows | Camunda | |--------------------|------------------|------------------|------------------|------------------| | **学习曲线** | 需Python基础 | 低代码易上手 | 需K8s知识 | 需BPMN知识 | | **部署复杂度** | 中等 | 简单 | 高(依赖K8s) | 中等 | | **任务类型** | 数据处理优先 | 通用型 | 云原生应用 | 业务流程驱动 | | **监控能力** | 基础指标+日志 | 可视化仪表盘 | Prometheus集成 | 流程实例追踪 | | **社区活跃度** | 极高 | 高 | 快速增长 | 稳定 | --- ### **实践建议** 1. **技术栈匹配** - 已有Kubernetes集群 → **Argo Workflows** - Python主导的数据团队 → **Airflow** - 需要人工审批节点 → **Camunda** 2. **扩展性考量** - 超大规模任务调度:优先选择**Airflow** + Celery Executor - 混合云环境:**DolphinScheduler**的多集群支持更适合 3. **开发效率优化** - 快速原型开发:使用**DolphinScheduler**拖拽界面 - 复杂逻辑处理:**Airflow**的Python DSL更灵活 --- **学习资源推荐**: - Airflow官方文档:https://airflow.apache.org/ - Argo实战教程:https://argoproj.github.io/ - Camunda建模指南:https://camunda.com/bpmn/ 根据团队技术储备和业务场景选择最合适的工具,建议从小规模PoC验证开始逐步推进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值