Roadmaps สำหรับเริ่มศึกษา Apache Airflow ฉบับ Zero to โคตร Advance
จากที่ผมศึกษา Apache Airflow มาประมาณนึง ย้อนกลับช่วงเริ่มต้น (หลายปีแล้ว) setup เองผิดๆถูกๆ, คอร์สสอนแทบยังไม่มี, อ่าน documents ก็ค่อยไม่เข้าใจ แต่ก็ไปเจอคอร์สของ Marc Lamberti ใน Udemy ที่พาผ่านก้าวแรกไปได้
ตัดมาที่ตอนนี้ก็เดินทางมาไกลประมาณนึงและใช้ในงานอยู่บ่อยๆ เลยจะขอแชร์แนวทางในการศึกษาว่ามีหัวข้อประมาณไหนบ้าง ในแต่ละระดับ Level มีอะไร ส่วนนี้ก็จะแบ่งเป็นระดับ Basic, Advance และโคตร Advance ใครอยู่ใน Level ไหนก็พิมบอกกันได้
Check Point 0 : ก่อนจะไป Basic Apache Airflow ต้องมีพื้นฐาน Python ก่อน เพราะ Airflow เป็น Code-based ที่จะจัดการ data pipeline ด้วย code อาจจะดูไปถึงเรื่อง OOP, decorator, context manager เลย คือถ้าเขียนได้แล้วจะสนุกมาก เช่นอยากได้ 10 pipelines ก็ for loop ได้เลย เห็นภาพมั้ย
Level: Basic
เริ่ม Setup กันก่อน ยากสุดของเรื่องแล้วโดยเฉพาะมือใหม่ (เปิดมาก็ยากสุดเลยหรอพรี่) มันมีหลายท่า Setup นะ สรุปสั้นๆ แนะนำใช้ github codespaces แล้วสร้างด้วย docker-compose สำหรับใช้ในการเรียนรู้ (มี doc ที่เคยสอนคอร์สเรียน data-ai-bootcamp แปะไว้ตอนท้าย)
ทำความคุ้นเคย Web UI: หลังจากที่ Setup กันมาเสร็จเรียบร้อย ลองเข้าไปทำความคุ้นเคยกับ Web UI เพื่อดูว่ามีอะไรบ้าง DAG, Task, Grid View, Log, Variable, Connection, การจัดการสิทธิ์ User, Roles
ทำความเข้าใจ Architecture คร่าวๆ webserver, scheduler, executor, worker, database backend, dags folder แต่ละตัวทำอะไรจังหวะไหน แล้วดูด้วยว่า apache airflow ใช้สำหรับงานแบบไหนและไม่เหมาะกับอะไร
Syntax DAG files: ดูการเขียน Code จะสร้าง data pipeline 1 อันต้องเขียนส่วนไหนบ้าง DAG, Task, Dependencies ยังไง
ฝึกเขียน DAG & Task: หลักๆคือ DAG ปรับอะไรได้บ้าง ตั้งเวลาทำงานยังไง, Task หลักๆดูพวก PythonOperator, BaseOperator และ SensorOperator เป็นตัน
Check Point 1: ถ้าถึงจุดนี้ เราจะสามารถจัดการ automate workflow ทั่วๆไปได้แล้ว ซึ่งไม่ธรรมดาแล้วนะ หลายคนอาจจะพอเท่านี้ก็ได้ เก่งมากๆแล้ว ถ้าจะไปต่อถัดไปจะ Advance ถึงจุดที่ใช้งานจริงในองค์กรเลย
Level: Advance
- Manage workflow: ถ้ามาใช้ในองค์กร งานน่าจะมีเยอะมากๆ จะมีเงื่อนไขตามมาเพียบ เช่นถ้าเกิดแบบนี้จะทำ task1 ถ้าอีกแบบไปทำ task2 หรือ 2 tasks นี้ต้องทำขนานกันไป จัดระเบียบ task เป็น taskgroup รวมไปถึงเรื่อง XCOM ด้วย
- Troubleshooting: ลองฝึกเขียน dag เองบ่อยๆ แล้วลองแก้ปัญหาดู เช่น เวลามีบัคหรือ pipeline พังกลางทาง เราต้องเข้าไปเช็ค log และ rerun เพื่อแก้ปัญหาได้ ฝึกไว้เยอะ มีประโยชน์มากๆ
- Variable: เราสามารถตั้ง variable บนหน้า UI ได้ เช่นอะไรที่เป็น common ใช้กันในหลายๆ file ก็ปรับบน Web ที่เดียว (อันนี้ไม่ยาก) พวกนี้ช่วยเราจัดการ Secret ได้อีกด้วยนะ
- Connection: เวลาเป็นระดับองค์กร มักจะต้องเชื่อมต่อระบบอื่นๆเยอะมาก เช่น S3, Database อื่นๆ ซึ่ง Airflow เราสามารถ Set Connection ไว้ได้ ไม่ต้องมาใส่ url, username, password ใน Code เวลาจะปรับก็แก้ที่เดียว ไม่ต้องไปแก้แต่ละ dag files และเวลาใช้งานก็ใช้ผ่าน Operator และ Hook ได้เลย (Hook คืออะไร? ดูเพิ่มด้วย)
- Retry & Notify: เวลาระบบมีปัญหาอาจจะให้มัน retry แก้ด้วยตัวเองก่อน ถ้าไม่ได้ก็แจ้งเตือนคนดูแลให้มาแก้ไขได้ทันเวลา ไม่ต้องนั่งเฝ้าตลอด ดูการตั้งค่า Retry และการ Notify ก็ปรับให้ใช้กับเครื่องมือที่เราใช้อยู่ จะ Slack, msteam, telegram, email ก็ลองดูๆ
- Usecase & Best Practice: ลองศึกษา usecase การนำ airflow ไปใช้งาน เช่น ETL รูปแบบต่างๆ, MLOps, GenAI จะเห็นภาพทีหลากหลายขึ้น รวมถึงการ config airflow แต่ละตัวแปร เช่น Executor ก็มีหลาย mode LocalExecutor KubernetesExecutor LocalKubernetesExecutor แต่ละอันก็ setup ต่างกัน
Check Point 2: ถึงจุดนี้จะเป็นระดับที่ใช้ Airflow ค่อนข้าง Advance แล้ว ใช้ทำงานในองค์กรสบายๆ ถ้าถัดไปจะสำหรับคนที่อยากจะเชี่ยวชาญ Airflow ตัวจริง โคตร Advance
Level: โคตร Advance
Optimize Performance: จุดนี้งานเรามีเยอะมากกก (ก ล้านตัว) เราต้องจัดลำดับความสำคัญของงานแต่ละ Task แต่ละ Pipeline ถ้ามี Resource จำกัด จะรันได้กี่ concurrent, ตัวไหนจะได้ทำก่อน ลองดู parallelism, max_active_tasks_per_dag, max_active_runs_per_dag, pooling ดูการตั้งในแต่ละ Level ทั้ง Installation, DAG และ Task
Config: ลองดูไฟล์ airflow.cfg ปรับตัวไหนส่งผลอย่างไร, ไปดู Source Code ของแต่ละ Hook, Operator สวมบทเป็นคนเขียน Airflow เลย คือถ้าจุดไหนไม่เหมาะกับงานเราก็ปรับเป็น custom ได้
Custom Hooks & Operators: บางอย่างระบบเรามีความเฉพาะทาง ที่จะต้อง Custom จากเดิมที่มีอยู่ Airflow ก็รองรับจุดนี้ เราก็ไปเขียนให้คนอื่นๆมาใช้ได้
การจัดการสิทธิ์: Roles, Users ถึงจุดนี้ระบบ pipeline อาจจะไม่ได้มีแค่เราหรือทีมเรา ไม่ใช่ใครจะเข้ามาทำอะไรก็ได้หรือใช้ Account เดียวร่วมกันไม่ได้แล้ว เราต้องคุมการใช้งานของแต่ละคน นั้นคือการสร้าง User แยก และแต่ละ User จะมีสิทธิ์ที่แตกต่างกันไป
API: ตัว Airflow เองสามารถคุยกับระบบอื่นๆผ่าน API ได้ แปลว่าระบบอื่นๆสามารถมาสั่งงานระบบเราได้เช่นกัน หรือจะจัดการ automate ระบบต่างๆ
เนื้อหาก็จะประมาณนี้ ซึ่งก็มีอีกหลายอย่างที่ไม่ได้กล่าวถึง แล้วแต่ละคนอาจจะเจอหน้างานที่ต่างกัน อาจจะแชร์เป็น usecase หรือพูดคุย discuss กันได้ครับ
Ref:
- Repo จากคอร์ส Data AI Bootcamp 2024: https://github.com/wuttichai-hung/data-ai-bootcamp/tree/main/04-data-pipeline-with-apache-airflow
- Airflow Official Document: https://airflow.apache.org/docs/apache-airflow/stable/ui.html
Wuttichai Kaewlomsap
Sr. Data Engineer