4. Airflow安装与部署

在金融ETL场景中,Airflow的部署方式直接决定了任务调度的稳定性、故障恢复能力与合规审计水平。本节围绕四种典型部署形态展开:本地环境用于开发调试,Docker Compose用于团队协作与集成测试,Kubernetes用于弹性伸缩与资源隔离,生产环境则需叠加金融级高可用设计。理解每种形态的适用边界与配置要点,是后续编写可靠DAG的前提。

核心原理:部署形态决定调度可靠性

Airflow的架构由元数据库、调度器(Scheduler)、执行器(Executor)、Web服务器与Worker组成。部署形态的本质差异在于:这些组件运行在何处、如何共享元数据、以及故障时如何切换。本地环境通常使用SequentialExecutor,调度与执行在同一进程;Docker Compose可模拟多容器协作,常用LocalExecutor或CeleryExecutor;Kubernetes则通过KubernetesExecutor为每个任务动态创建Pod,实现资源隔离与弹性。金融级高可用的核心要求是:调度器多活或主备、元数据库主从切换、任务幂等与重试不丢不重。

Airflow部署形态与组件分布 本地环境 SequentialExecutor SQLite元数据库 单进程调度+执行 Docker Compose LocalExecutor PostgreSQL元数据 多容器协作 Kubernetes KubernetesExecutor Pod级资源隔离 动态伸缩 生产高可用 CeleryExecutor 多Scheduler PG主从+Redis 金融级高可用关键组件 元数据库 PostgreSQL主从 自动故障切换 消息队列 Redis/RabbitMQ 持久化+哨兵 调度器 多活/主备 心跳检测 日志与审计 远程日志存储 操作留痕

方法流程:四种部署形态的落地步骤

本地环境适合快速验证DAG逻辑。推荐使用Python虚拟环境安装,避免污染系统包。关键命令如下:

python -m venv airflow_env
source airflow_env/bin/activate
pip install apache-airflow==2.8.1
export AIRFLOW_HOME=~/airflow
airflow db init
airflow users create --username admin --password admin \
  --firstname Admin --lastname User --role Admin --email admin@example.com
airflow webserver --port 8080 &
airflow scheduler &

Docker Compose适合团队统一环境。官方提供的docker-compose.yaml已包含PostgreSQL、Redis、Webserver、Scheduler与Worker。启动前需调整关键参数:

AIRFLOW__CORE__EXECUTOR: LocalExecutor
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
AIRFLOW__CORE__FERNET_KEY: 'your-fernet-key'
AIRFLOW__WEBSERVER__SECRET_KEY: 'your-secret-key'

Kubernetes部署推荐使用官方Helm Chart。核心配置包括:Executor设为KubernetesExecutor,配置Pod模板与资源限额,启用RBAC与ServiceAccount。金融场景需为每个任务Pod设置resource requests/limits,避免资源争抢导致关键任务延迟。

生产环境高可用需满足以下清单:

组件高可用要求金融级配置建议
元数据库主从复制+自动切换PostgreSQL流复制,Patroni或云RDS多可用区
消息队列持久化+集群Redis Sentinel或RabbitMQ镜像队列
调度器多活或主备至少2个Scheduler,启用HA模式,心跳间隔≤30s
Worker水平扩展+故障转移Celery Worker多副本,队列按业务隔离
日志集中存储+审计远程日志写入S3/ELK,保留≥180天
监控告警全链路可观测Prometheus+Grafana,关键指标告警

案例场景:金融日终批处理的高可用部署

某银行日终ETL需在凌晨1:00至5:00完成2000+任务,涉及核心账务与监管报送。部署方案采用:Kubernetes集群运行Airflow,CeleryExecutor配合Redis集群,元数据库使用PostgreSQL主从。Scheduler部署3副本,通过数据库行锁实现任务分发互斥。每个任务Pod配置CPU 2核、内存4GB,关键任务设置priorityClassName确保优先调度。日志实时写入Elasticsearch,审计日志单独存储。当某个Worker节点故障时,Celery自动将任务重新入队,配合DAG中retries=3、retry_delay=timedelta(minutes=5)实现金融级重试。该方案已稳定运行两年,日终批处理成功率99.98%。

常见误区:许多团队在本地用SQLite开发,上线后直接切换PostgreSQL,却忽略SQLite与PostgreSQL在并发写入、事务隔离上的差异,导致调度器频繁死锁。建议从Docker Compose阶段就使用PostgreSQL,保持环境一致性。

复盘要点:金融级高可用不是简单堆副本。需重点验证:Scheduler故障切换时任务是否重复执行、元数据库切换时DAG解析是否中断、Worker重启后任务状态是否一致。建议每季度做一次故障演练,模拟Scheduler宕机与数据库主从切换,观察任务补偿与告警响应。

部署完成后,可通过以下命令验证高可用状态:

airflow jobs check --job-type SchedulerJob --hostname $(hostname)
airflow db check
airflow tasks states-for-dag-run example_dag 2024-01-01