← warin.me · Data Science and EngineeringEnglish

DATA ENGINEERING · WORKFLOW ORCHESTRATION

มองเห็น data pipeline กำลังคิด

Apache Airflow เปลี่ยน workflow ให้เป็นกราฟแบบมีทิศทางและไม่มีวงรอบ แต่ละ task มีสถานะที่ตรวจสอบได้ dependency กำหนดว่างานใดไปต่อได้ และ scheduler ประสานการทำงานโดยไม่ซ่อนหลักฐาน

บัญชีสำหรับชั้นเรียนwarin/Airflow2026
01DAGอธิบาย dependency
02Schedulerค้น task ที่พร้อม
03Executorลงมือทำงาน
04Metadataเก็บหลักฐาน

INTERACTIVE DAG SIMULATOR

เดินทีละการตัดสินใจของ scheduler

แบบจำลองใน browser ไม่ได้รัน Airflow จริง แต่แยกตรรกะ dependency ให้เห็นชัดก่อนเปิด UI จริงใน Docker

extractsource
validatequality gate
summarizeTaskFlow
find_bestTaskFlow
loadsink
รอกำลังทำสำเร็จ

REAL AIRFLOW · DOCKER COMPOSE

จากแบบจำลองสู่ระบบที่ตรวจสอบได้จริง

ชุดดาวน์โหลดมี Compose, PostgreSQL, LocalExecutor, DAG สำหรับ Airflow 3 สองตัว สคริปต์เปิด/ปิด และคู่มือสำหรับการสอน

1

ติดตั้ง Docker

ติดตั้ง Docker Desktop หรือ Docker Engine ที่มี Compose V2 และจัดสรร RAM อย่างน้อย 4 GB

2

Initialize ครั้งแรก

docker compose up airflow-init

รอจน container สำหรับ initialize จบด้วยรหัส 0

3

เปิดห้องทดลอง

docker compose up -d

http://localhost:8080 · airflow / airflow

4

ตรวจหลักฐาน

Trigger teaching_etl แล้วดู Graph, Grid, task log, retry และค่า XCom

UI จริงและชุดติดตั้งสำหรับนักศึกษาhttps://warin.me/airflow/ · warin / Airflow2026

SYSTEM ARCHITECTURE

DAG คือโค้ด ส่วน orchestration คือบทสนทนาระหว่างบริการ

DAG processor

อ่านไฟล์ Python และสร้างโครงสร้าง workflow หาก syntax ผิด DAG อาจไม่ปรากฏ

Scheduler

ประเมิน dependency และสถานะ ก่อนส่ง task instance ที่พร้อมให้ executor

LocalExecutor

รันหลาย task process บนเครื่องเดียว เหมาะกับชุดสอนนี้ ไม่ใช่ distributed cluster

PostgreSQL

เก็บ DAG run, task state, schedule, connection และ metadata ของ XCom ซึ่งเป็นหลักฐานเบื้องหลัง UI

API server

ให้บริการ web UI และ API ที่พอร์ต 8080 ห้ามเปิด credential สำหรับชั้นเรียนสู่สาธารณะ

Triggerer

รอ deferrable task อย่างมีประสิทธิภาพโดยไม่ยึด worker slot

MANUAL DAILY INGESTION · OPEN-METEO → POSTGRESQL

โหลดข้อมูลทีละวันที่เลือก โดยไม่ใช้ cron

กด Trigger DAG แล้วกำหนด data_date เพื่อดู Extract → Validate → Load โดย UPSERT ทำให้รันวันเดิมซ้ำได้อย่างปลอดภัย

@dag(
    dag_id="daily_weather_to_postgres",
    schedule=None,  # manual trigger only
    params={"data_date": Param("2026-08-01", format="date")},
)
def daily_weather_to_postgres():
    row = validate(extract())  # download one day from Open-Meteo
    load(row)                  # UPSERT into teaching_daily_weather
ซอร์ส DAG พร้อมใช้งานเลือกวันที่ย้อนหลังที่จบวันแล้วในแบบฟอร์ม Trigger DAG

AIRFLOW 3 · TASKFLOW API

กราฟ dependency เกิดจากการเรียกฟังก์ชัน

ค่าที่ return กลายเป็น XCom reference การเรียกฟังก์ชันที่มี decorator จึงนิยาม task แทนการรัน Python ทันที

from airflow.sdk import dag, task

@dag(schedule=None, start_date=..., catchup=False)
def teaching_etl():
    @task
    def extract() -> list[dict]: ...

    @task
    def summarize(rows: list[dict]) -> dict: ...

    rows = extract()
    summarize(rows)       # XComArg wires the dependency

teaching_etl()

TEACHING SEQUENCE

หกการทดลองจากการอ่านกราฟสู่การดำเนินงาน

01

ทำนาย task ที่พร้อมรันก่อนกดขั้นถัดไป

02

เปลี่ยนข้อมูลและตรวจสายสัมพันธ์ผ่าน XCom

03

บังคับให้ล้มเหลวหนึ่งครั้งแล้วอธิบาย retry

04

เปลี่ยนคะแนน branch และระบุ task ที่ถูก skipped

05

เพิ่ม cron schedule แล้วแยก logical date จากเวลาจริง

06

วินิจฉัย DAG ที่หายด้วย parser error และ container log

ระบบสำหรับสอน ไม่ใช่สูตร production

credential และ secret ในชุดนี้ตั้งใจทำให้ง่าย โปรดเปิดเฉพาะ localhost ระบบ production ต้องออกแบบ secret, TLS, authentication, backup, monitoring และ executor/deployment model อย่างจริงจัง