Bài 1

Tổng quan & Kiến trúc Airflow

Apache Airflow là nền tảng mã nguồn mở để lập trình, lập lịch và giám sát workflow. Bài này làm rõ Airflow giải quyết vấn đề gì, các khái niệm nền tảng (DAG, Task, Operator, DAG Run...) và cách các thành phần Scheduler, Webserver, Worker, Executor, Metadata DB phối hợp với nhau.

Airflow là gì & dùng để làm gì
Orchestration cho data pipeline

Apache Airflow là công cụ điều phối workflow (workflow orchestration): bạn mô tả một chuỗi công việc và sự phụ thuộc giữa chúng bằng code Python, Airflow sẽ lo việc chạy đúng thứ tự, đúng lịch, tự retry khi lỗi và cho bạn giao diện theo dõi.

Thay vì gom nhiều dòng cron rời rạc (khó biết job nào phụ thuộc job nào, lỗi thì im lặng), Airflow cho phép khai báo cả pipeline như một đồ thị có hướng. Các trường hợp dùng điển hình:

Cốt lõi: Airflow điều phối chứ không phải engine xử lý dữ liệu. Task của Airflow nên ra lệnh cho hệ thống khác làm việc nặng (Spark, SQL warehouse) thay vì tự xử lý hàng triệu dòng trong tiến trình Python.
Các khái niệm nền tảng
Từ vựng bắt buộc phải nắm
Khái niệmÝ nghĩa
DAGDirected Acyclic Graph — đồ thị có hướng, không chu trình, mô tả toàn bộ workflow: gồm những task nào và phụ thuộc ra sao. Một file .py = một (hoặc nhiều) DAG.
TaskMột đơn vị công việc (một node trong DAG), ví dụ "tải file", "transform", "load". Task được tạo bằng cách khởi tạo một Operator.
OperatorKhuôn mẫu định nghĩa loại công việc của một task: BashOperator chạy lệnh shell, PythonOperator gọi hàm Python, PostgresOperator chạy SQL...
Task InstanceMột lần chạy cụ thể của một task cho một thời điểm logic nhất định. Có trạng thái: success, failed, running, up_for_retry...
DAG RunMột lần thực thi toàn bộ DAG cho một khoảng thời gian (data interval). Mỗi DAG Run chứa nhiều Task Instance.
schedule_intervalTần suất chạy DAG: preset (@daily, @hourly), biểu thức cron (0 6 * * *), hoặc timedelta. Airflow 2 dùng tham số tên schedule.
start_dateMốc thời gian DAG bắt đầu có hiệu lực lập lịch. Quyết định DAG Run đầu tiên.
catchupNếu True, khi bật DAG Airflow sẽ chạy bù mọi khoảng từ start_date tới hiện tại. Thường đặt False để tránh "bão" DAG Run.
backfillChạy lại DAG cho một dải ngày trong quá khứ một cách chủ động (qua lệnh CLI airflow dags backfill) — hữu ích khi sửa logic và cần xử lý lại lịch sử.
start_date + catchup: Airflow chạy theo khoảng dữ liệu (data interval). Một DAG @daily với start_date hôm qua sẽ chạy lần đầu sau khi khoảng ngày hôm qua kết thúc. Đặt catchup=False để chỉ chạy khoảng mới nhất, tránh chạy bù toàn bộ lịch sử ngoài ý muốn.
Kiến trúc & các thành phần
Ai làm việc gì

Một cài đặt Airflow gồm vài tiến trình phối hợp quanh một cơ sở dữ liệu trung tâm:

Thành phầnVai trò
SchedulerBộ não: định kỳ parse các file DAG, xác định task nào đến hạn, tạo DAG Run/Task Instance và đẩy chúng vào hàng đợi để Executor chạy.
Webserver (UI)Giao diện web ở cổng 8080 để xem DAG, trạng thái, log, trigger thủ công, quản lý Connections/Variables.
WorkerTiến trình thực sự chạy task (có khi nhiều máy). Với CeleryExecutor/KubernetesExecutor, worker tách riêng khỏi Scheduler.
ExecutorCơ chế quyết định task chạy ở đâusong song thế nào — chạy cục bộ, qua Celery, hay Kubernetes (xem bảng dưới).
Metadata DBCơ sở dữ liệu (thường Postgres) lưu mọi trạng thái: DAG Run, Task Instance, Connections, Variables, XCom, user. Là "nguồn sự thật" của hệ thống.
Kiến trúc Airflow — Scheduler, Webserver, Executor Scroll / zoom · Mở draw.io ↗
Scheduler parse DAG định kỳ: Scheduler quét lại thư mục dags/ theo chu kỳ (mặc định vài chục giây). Vì vậy code ở cấp module trong file DAG (ngoài hàm task) sẽ chạy mỗi lần parse — tránh đặt truy vấn DB/HTTP nặng ở cấp module, nếu không Scheduler sẽ ì ạch.
Các loại Executor
Chọn theo quy mô
ExecutorĐặc điểmKhi nào dùng
SequentialExecutorChạy một task tại một thời điểm, không song song; dùng SQLite. Mặc định khi mới cài.Chỉ để thử nhanh / demo. Không dùng thật.
LocalExecutorChạy nhiều task song song bằng subprocess trên cùng một máy với Scheduler.Lab, dev, hoặc production nhỏ một node (đây là cái lab Docker dùng).
CeleryExecutorPhân phối task tới nhiều worker qua message broker (Redis/RabbitMQ). Scale ngang được.Production tải lớn, cần nhiều worker và độ co giãn.
KubernetesExecutorMỗi task chạy trong một Pod riêng, sinh động theo nhu cầu, tự dọn sau khi xong.Đã có cụm Kubernetes, cần cô lập tài nguyên và scale theo từng task.
Mẹo: với việc học và lab tại máy, LocalExecutor + Postgres (qua Docker Compose chính thức) là đủ — vừa song song được vừa giống production một node.
← Quay lại
Tổng quan Airflow