Apache Airflow 3.1.6 快速上手:Docker Compose 部署 + 常见对接指南


Apache Airflow 3.x 是数据工程领域最主流的编排工具之一。3.0 版本带来了全新架构(Task SDK、DAG Bundles、资产感知调度等),3.1.x 系列则在稳定性、性能和生态兼容性上持续优化。3.1.6 是目前(2026年初)比较推荐的稳定小版本。本文将带你用 不到 10 分钟 在本地通过 Docker Compose 跑起 Airflow 3.1.6,并介绍最常见的几种“对接”方式。

一、为什么选择 Docker Compose 快速部署?

官方明确表示:docker-compose.yaml 只适合快速上手、开发测试、POC,不推荐直接用于生产。但它却是目前最快的合法方式,能一次性启动:

  • PostgreSQL(元数据库)
  • Redis(Celery 结果后端 + Broker)
  • Airflow Webserver + API Server
  • Scheduler
  • Worker(多个)
  • Triggerer
  • Flower(Celery 监控,可选)

二、一步到位:快速部署 Airflow 3.1.6

步骤 1:准备环境确保已安装:

  • Docker ≥ 20.10
  • Docker Compose ≥ v2(旧版 docker-compose 命令已不推荐)

步骤 2:下载官方 docker-compose.yaml(3.1.6 专用)

bash

# 创建项目目录
mkdir airflow-3.1.6-quickstart && cd airflow-3.1.6-quickstart

# 下载 3.1.6 版本专用 compose 文件
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/3.1.6/docker-compose.yaml'

重要:不要用 stable 或 latest 链接,要固定版本避免不一致。

步骤 3:创建 .env 文件(强烈推荐)在当前目录创建 .env 文件,内容至少包含:

env

# .env
AIRFLOW_UID=$(id -u)                  # Linux/macOS 必须,避免权限问题
AIRFLOW_IMAGE_NAME=apache/airflow:3.1.6

# 初始管理员账号(第一次启动会自动创建)
_AIRFLOW_WWW_USER_USERNAME=admin
_AIRFLOW_WWW_USER_PASSWORD=airflow123   # 请改成自己的强密码
_AIRFLOW_WWW_USER_EMAIL=admin@example.com

# 关闭示例 DAG(生产/干净环境推荐)
AIRFLOW__CORE__LOAD_EXAMPLES=false

Windows 用户可手动写 AIRFLOW_UID=50000(任意非 root 值)。

步骤 4:初始化环境并启动

bash

# 创建必须的挂载目录(否则启动会失败)
mkdir -p ./dags ./logs ./plugins

# 初始化数据库 + 创建用户(只需执行一次)
docker compose up airflow-init

# 启动所有服务(后台模式)
docker compose up -d

等待 1–2 分钟,查看日志:

bash

docker compose logs -f

步骤 5:访问 Web UI浏览器打开:http://localhost:8080

  • 用户名:admin(或你 .env 中设置的)
  • 密码:airflow123(或你设置的)

成功登录后,你就拥有了一个完整的 Airflow 3.1.6 环境。快速停止/清理

bash

# 停止
docker compose down

# 彻底清理(包含数据库数据)
docker compose down --volumes --remove-orphans

三、Airflow 3.1.6 最常见的几种“对接”方式1. 认证方式对接(API 调用)Airflow 3.x 默认使用 Simple Auth Manager,但大多数生产环境会切换到 FabAuthManager(支持用户/角色/LDAP/OAuth)。快速启用传统用户名密码 + /auth/token:在 .env 增加:

env

PIP_ADDITIONAL_REQUIREMENTS=apache-airflow-providers-fab
AIRFLOW__CORE__AUTH_MANAGER=airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager

重启后即可使用:

bash

# 获取 JWT Token
curl -X POST http://localhost:8080/auth/token \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"airflow123"}'

后续 API 调用带上 Authorization: Bearer <token>

注意:/auth/token 不在 /api/v2/docs 里显示,它是根路径下的独立端点,是http://localhost:8080/auth/token,不是http://localhost:8080/api/v2/auth/token

2. 数据库/连接对接(最常用)在 UI → Admin → Connections 添加,或用环境变量提前注入:

env

# 示例:MySQL 连接
AIRFLOW_CONN_MYSQL_DEFAULT=mysql://user:pass@host:3306/dbname

# 示例:Google Cloud(keyfile 方式,需挂载文件)
AIRFLOW_CONN_GOOGLE_CLOUD_DEFAULT=google_cloud_platform://?extra__google_cloud_platform__key_path=/keys/gcp.json

挂载方式:在 docker-compose.yaml 的 volumes 里添加:

yaml

volumes:
  - ./keys:/keys:ro

3. DAG 与外部系统对接

  • 推荐写法(Airflow 3.x 风格):

python

from airflow.sdk import DAG, task
from datetime import datetime

@task
def extract():
    return [1, 2, 3]

@task
def transform(data):
    return [x * 2 for x in data]

with DAG(
    dag_id="simple_example",
    start_date=datetime(2025, 1, 1),
    schedule="@daily",
    catchup=False,
    tags=["example"],
):
    extracted = extract()
    transformed = transform(extract=extracted)
  • 资产感知调度(Airflow 3.x 新特性):

python

from airflow.sdk import Asset

sales_data = Asset("s3://my-bucket/sales.parquet")

@task(outlets=sales_data)
def process_sales():
    ...

下游 DAG 可写 schedule=[sales_data] 来实现事件驱动。4. 自定义依赖/镜像对接想加包(如 pandas、requests、snowflake-connector 等)?两种方式:方式 A:修改 .env + 重建(推荐)

env

# .env
_PIP_ADDITIONAL_REQUIREMENTS=pandas==2.2.3 snowflake-connector-python

然后:

bash

docker compose down
docker compose build --no-cache
docker compose up -d

方式 B:自定义 Dockerfile创建 Dockerfile:

dockerfile

FROM apache/airflow:3.1.6
USER root
RUN apt-get update && apt-get install -y build-essential
USER airflow
RUN pip install --no-cache-dir pandas snowflake-connector-python

然后在 docker-compose.yaml 中把 image 改为 build 方式。

四、小结与建议

祝你快速上手 Airflow 3.1.6,构建高效的数据管道!


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

探索未来出版

九录科技愿意通过最前沿的技术和深厚的行业理解,为您的数字业务提供架构简单但很灵活的从创作到发布的全方位支持。

本站内容部分由AI生成,仅供参考,具体业务可随时电话/微信咨询(18610359982)。