跳转到内容

Airflow部署架构

来自代码酷

Airflow部署架构[编辑 | 编辑源代码]

Airflow部署架构是指Apache Airflow在生产环境中的组件布局与交互方式,它决定了系统的可扩展性、容错能力和资源利用率。本页面将详细介绍核心组件、常见部署模式及优化策略。

核心组件[编辑 | 编辑源代码]

Airflow由以下关键组件构成:

组件名称 功能描述 典型配置
Web Server 提供图形化界面(DAG查看、任务触发等) Gunicorn + 2-4 workers
Scheduler 解析DAG、调度任务、触发执行 高CPU配置,建议独占节点
Executor 实际执行任务的运行时环境 本地/Celery/Kubernetes
Metadata Database 存储DAG元数据、任务状态等 PostgreSQL/MySQL(推荐)
消息队列 协调任务分发(仅分布式模式需要) Redis/RabbitMQ

基础部署模式[编辑 | 编辑源代码]

单机部署[编辑 | 编辑源代码]

最简单的架构,所有组件运行在单节点:

graph LR A[Web Server] --> D[Metadata DB] B[Scheduler] --> D C[Executor] --> D B --> C

适用场景:开发环境或低负载生产环境

Celery分布式部署[编辑 | 编辑源代码]

通过消息队列实现水平扩展:

graph TD A[Web Server] --> D[Metadata DB] B[Scheduler] --> D B --> E[Redis/RabbitMQ] E --> F[Celery Worker 1] E --> G[Celery Worker 2] F --> D G --> D

关键配置示例(airflow.cfg):

[core]
executor = CeleryExecutor
sql_alchemy_conn = postgresql+psycopg2://user:password@db-host:5432/airflow

[celery]
broker_url = redis://redis-host:6379/0
result_backend = db+postgresql://user:password@db-host:5432/airflow

Kubernetes部署[编辑 | 编辑源代码]

使用Kubernetes Executor的弹性架构:

graph TD A[Web Server Pod] --> D[Metadata DB] B[Scheduler Pod] --> D B --> E[K8s API Server] E --> F[Worker Pod 1] E --> G[Worker Pod 2] F --> D G --> D

优势

  • 动态资源分配
  • 容器隔离性
  • 自动扩缩容

高可用配置[编辑 | 编辑源代码]

生产环境建议配置:

  • Scheduler HA:运行多个scheduler实例(Airflow 2.0+支持)
  • 数据库HA:主从复制或云托管数据库
  • 消息队列集群:RabbitMQ镜像队列或Redis Sentinel

健康检查配置示例

from airflow.www.app import create_app
from flask.healthz import healthz

app = create_app()
app.register_blueprint(healthz, url_prefix="/healthz")

性能优化[编辑 | 编辑源代码]

数学建模建议资源分配: Worker数量=平均任务耗时×任务吞吐量并行系数

实际案例: 某电商公司使用Celery部署处理每日5000+任务:

  • 3 scheduler节点(8 vCPU each)
  • 15 Celery workers(4GB内存 each)
  • PostgreSQL RDS(16 vCPU, 64GB RAM)
  • Redis集群(3节点)

常见问题[编辑 | 编辑源代码]

  • 数据库瓶颈:监控airflow scheduler --stats输出
  • 队列积压:调整parallelismdag_concurrency
  • 资源竞争:使用KubernetesExecutor或Celery队列隔离

扩展阅读[编辑 | 编辑源代码]

  • Airflow官方部署指南
  • 云服务商托管方案比较(AWS MWAA vs Google Composer)
  • 网络拓扑安全建议