Apache Airflow là gì? Công cụ điều phối workflow mạnh mẽ nhất hiện nay
Nguyễn Đình Tiến
7/3/2025•8分で読める
23
0
APACHE AIRFLOW
I. Khái niệm
Airflow là một công cụ lập lịch trình cho luồng công việc của bạn cũng như hỗ trợ quản lý, theo dõi từng phần trong quy trình giúp bạn sửa lỗi, bảo trì code thuận tiện và dễ dàng.
Airflow có thể tự động hóa quy trình công việc của bạn bằng DAGs ( Directed Acyclic Graphs ).
II. Các thành phần cơ bản của Apache Airflow
a. DAGs
- Directed Acyclic Graph là một đồ thị có hướng không chu trình, mô tả tất cả các bước xử lý dữ liệu trong một quy trình
- Quy trình công việc thường được xác định với sự trợ giúp của Đồ thị theo chu kỳ có hướng (DAG)
- Mỗi DAG được xác định trong 1 file DAG, nó định nghĩa một quy trình xử lý dữ liệu, được biểu diễn dưới dạng một đồ thị có hướng không chu trình, trong đó các nút là các tác vụ (tasks) và các cạnh là các phụ thuộc giữa các tác vụ.
- Các tác vụ trong DAG thường được xử lý tuần tự hoặc song song theo một lịch trình được định sẵn
- Khi một DAG được thực thi, nó được gọi là một lần chạy DAG
- Vòng đời của 1 trạng thái nhiệm vụ gồm có các trạng thái sau
- No status: tác vụ chưa được xếp hàng để thực hiện
- Scheduled: Bộ lập lịch đã xác định rằng các phụ thuộc của nhiệm vụ được đáp ứng và đã lên lịch cho nó chạy
- Removed: Vì một lý do nào đó, tác vụ đã biết mất khỏi DAG kể từ khi bắt đầu chạy
- Upstream failed: tác vụ ngược dòng không thành công
- Queued: Nhiệm vụ đã được giao cho Executor và đang đợi 1 worker có sẵn để thực thi
- Running: Tác vụ đang được chạy bởi một worker
- Sucess: Tác vụ chạy xong không có lỗi
- Failed: Tác vụ có lỗi trong khi thực thi và không chạy được
- Up for retry: Tác vụ không thành công nhưng vẫn còn các lần thử lại và sẽ được lên lịch lại
b. Task
- Task là một đơn vị cơ bản để thực hiện một công việc nhỏ trong quy trình xử lý dữ liệu. Mỗi Task là một bước trong quy trình và có thể được lập lịch thực hiện tùy theo các điều kiện cụ thể.
- Một Task trong Airflow có các thuộc tính và phương thức sau:
- task_id: định danh duy nhất của task trong DAG.
- owner: người sở hữu task.
- depends_on_past: xác định liệu task hiện tại có phụ thuộc vào kết quả của task trước đó hay không.
- retries: số lần thử lại nếu task thất bại.
- retry_delay: khoảng thời gian giữa các lần thử lại.
- start_date: thời điểm bắt đầu thực hiện task.
- end_date: thời điểm kết thúc thực hiện task.
- execution_timeout: thời gian tối đa cho phép để thực hiện task.
- on_failure_callback: hàm được gọi khi task thất bại.
- on_success_callback: hàm được gọi khi task thành công.
c. Operator
- Mỗi operator đại diện cho một công việc cụ thể trong quy trình, ví dụ như đọc dữ liệu từ một nguồn dữ liệu, xử lý dữ liệu, hoặc ghi dữ liệu vào một nguồn dữ liệu khác.
- Các operator trong Airflow được phân loại thành các loại chính sau
- BashOperator: Chạy các lệnh Bash hoặc script Shell.
- PythonOperator: Thực thi các hàm Python.
- EmailOperator: Gửi email thông qua SMTP.
- DummyOperator: Được sử dụng để tạo các kết nối giữa các task.
- PythonVirtualenvOperator: Thực thi các hàm Python trong một môi trường ảo.
- MySqlOperator: Thực hiện các lệnh SQL trên cơ sở dữ liệu MySQL.
- PostgresOperator: Thực hiện các lệnh SQL trên cơ sở dữ liệu PostgreSQL.
- S3FileTransformOperator: Thực hiện các chức năng xử lý file trên Amazon S3.
- SparkSqlOperator: Thực hiện các truy vấn Spark SQL.
- HdfsSensor: Kiểm tra sự tồn tại của một tệp trên Hadoop Distributed File System (HDFS).
d. Sensor
- Sensor là một loại Operator được sử dụng để giám sát các sự kiện và điều kiện, và thực hiện các hành động tương ứng.
- Sensor thường được sử dụng để đợi cho đến khi một điều kiện nào đó xảy ra trước khi tiếp tục thực hiện quy trình.
- Các loại Sensor trong Airflow bao gồm:
- FileSensor: Kiểm tra sự tồn tại của một tệp trên hệ thống tệp.
- TimeSensor: Đợi cho đến khi một khoảng thời gian cụ thể đã trôi qua.
- HttpSensor: Kiểm tra sự phản hồi của một URL cụ thể.
- HdfsSensor: Kiểm tra sự tồn tại của một tệp trên Hadoop Distributed File System (HDFS).
- SqlSensor: Kiểm tra sự tồn tại của một bảng hoặc một số dòng dữ liệu trong cơ sở dữ liệu.
- S3KeySensor: Kiểm tra sự tồn tại của một đối tượng trên Amazon S3.
- ExternalTaskSensor: Kiểm tra trạng thái của một task khác trong DAG.
III. Kiến trúc của Apache Airflow
Airflow bao gồm các components sau:
- Scheduler: chạy workflow ( luồng công việc ) , gửi các tasks tới executor
- Executor: quản lý các workers, xử lý các tác vụ đang chạy
- Webserver: giao diện web cho phép kiểm tra, kích hoạt, sửa lỗi các tasks và DAGs
- Folder of DAG files: đọc bởi scheduler và executor ( với mọi worker mà executor có )
- Metadata database: nơi lưu trạng thái của scheduler, executor, webserver
IV. Ứng dụng của Apache Airflow
a. Tự động hóa quy trình xử lý dữ liệu (ETL)
- Trích xuất dữ liệu từ nhiều nguồn(API, database, file, cloud,...)
- Biến đổi dữ liệu(Clean, transform, normalize)
- Tải dữ liệu vào data warehouse
b. Điều phối pipeline machine learning
- Lập lịch huấn luyện lại mô hình định kỳ (daily/weekly).
- Theo dõi pipeline từ dữ liệu → huấn luyện → đánh giá → triển khai.
c. Giám sát và cảnh báo workflow
- Gửi email/slack khi job thất bại.
- Tự động retry bước thất bại.
- Ghi log chi tiết để dễ dàng theo dõi.
d. Điều phối workflow đa bước phức tạp
- Cho phép tạo DAG (Directed Acyclic Graph) để biểu diễn các bước xử lý có phụ thuộc nhau.
- Hỗ trợ chạy song song, tuần tự, hoặc theo điều kiện.
e. Tích hợp với hệ sinh thái cloud và dữ liệu
Airflow có nhiều operator sẵn sàng dùng cho:
- Amazon S3, Google Cloud Storage, BigQuery, Redshift
- Bash, Python, Spark, Docker, Kubernetes
- Slack, email, webhook