一、Apache Airflow 的前世今生

Apache Airflow 的歷史、Airflow 是什麼工具、Workflow before Airflow、Airflow 到底是什麼?

一、Apache Airflow 的前世今生
Photo by T K / Unsplash
這系列的文章源自我 2023/9/16-2023/10/15  參加的 iT 鐵人賽:
2023 鐵人賽系列文章:Airflow 是什麼? 能吃嗎 ? 數據水管工的超級蘑菇

從前從前

2015 年,Airbnb 發展迅速,數據量大幅提升,每天必須管理數個資料流來完成自動化,數據管控遇到困難,當時身為 Airbnb 的資料工程師 Maxime Beauchemin 開發出了 Airflow。

修但幾勒~遇到困難還能先開發出一個產品!通常卡住在台灣只有 workaround 和 stackoverflow 吧~果然大神思考就是不一樣

2016 年 4 月 Airflow 專案加入(捐給)官方 Apache 基金會(Apache Software Foundation,ASF),進入 Apache 孵化器(Apache Incubator),2019 年成為頂級專案(Top-Level Project,TLP)從 Apache 孵化器光榮畢業,從此 Airflow 就改名為 Apache Airflow,截至 2023 年 9 月,共有 21.4k commits 和 31.7k stars。

為什麼 Airbnb 自己工程師開發的產品 Airflow 不自己維護要給 Apache,這樣不是很浪費嗎,通常是因為這不是他們主要謀生的商業模式,把他捐出來變成開源,反而對這項專案更好,Airbnb 可能沒有成本去長期維護。
Ref: Airflow 維護者 TP 訪談 Podcast

目前 Airflow 主要維護的公司就是 Astronomer,因為 Airflow 是開源的所以也沒辦法從中獲利,Astronomer 的方式就是能讓大家更簡單的使用 Airflow,我們如果要自己架設環境,可能要開一個雲端的虛擬機 (Virtual Machine),在 Google 的 GCP上可能就是 Compute Engine,Amazon 的 AWS 上可能就是 EC2,但 Astronomer 就讓你在他們平台就能一鍵架設,後續維護和開發都能在他們平台操作。

最近發現 Amazon 也有推出 MWAA (Managed Workflows for Apache Airflow),能讓 Airflow 架設和維護更簡單

Airflow 是 ___ 的工具

  • Apache Airflow is a tool for data orchestration.

在查資訊的時候常常會有這個字,Data Orchestration,代表資料協作、資料編排,也可以說 Airflow 是資料協調管理工具,但聽完應該還是很模糊吧,我覺得上面 Podcast 提到的樂團指揮或是餐廳主廚的舉例就好懂很多。

  • 樂團主要工作是演奏音樂,誒~那指揮在幹嘛?指揮並沒有直接在演奏,而是在確保節奏拍子,協調樂隊多個聲部,那可以沒有指揮嗎?這就要看規模了,如果人數很少,大家也都很有默契,基本上可以,但人一多起來就麻煩了,就需要把協作、編排、協調管理的工作另外教給專業的人。
  • 餐廳主廚也是相似,小間的可能只有三個廚師,人人都要煮,大間的就會分配,主廚最重要的是讓所有訂單都順利出單,而不是每一道菜都本人親手去煮,所以分配資源、協調管理才是主廚真正的工作。
  • 資料也一樣,如果整間公司目前只有一兩個資料源,排程也只有一兩個,其實真的不需要 Airflow,殺雞焉用牛刀,但是當資料來源和排程複雜程度上升之後,會指揮的主廚 Airflow 就要出馬了,開始負責 Data Orchestration 資料流的各項協調管理,編排出最穩定的出餐順序,或是確保多個聲部順利加入演奏,這樣後續的客人(老闆、PM)和聽眾(DS資料科學家、DA資料分析師)才會滿意,或是甲方爸爸才會買單。

Workflow before Airflow

討論 Airflow 前,先問問大家有聽過 Workflow 嗎?可以翻作工作流,在資料領域,也可以稱作 Dataflow (資料流),通常就是一連串的 Data Engineering (資料工程)的行為相互連接。

什麼? Data Engineering 是什麼?好多名詞ㄚㄚㄚㄚ?


其實這些通通都忘記也沒關係,就像是大學修課都會有「xxxx導論/概論」,都只是一些背景知識,忘記也可以,以後一邊實作就會慢慢想起來了。


好的,切回正題,Data Engineering 就是任何與數據有關的行為,可能是收集數據、設計數據架構、儲存數據、分析數據等等,不限任何工具,所以就算一行程式也沒寫,用手寫統計、計算機加總、Excel整理,這些都可以稱作 Data Engineering (資料工程),常常聽到的 ETL ,extract 擷取資料、transform 轉換資料、load 載入資料,都是 Data Engineering 其中一部份。那 Workflow 勒,Workflow 工作流就是把剛剛提到的各種和資料處理的行為串在一起。

Airflow 到底是什麼?

Airflow 就是一個可以用程式創建 Workflow 的開源 (open-source) 平台工具,可以創建、排程、監控多個不同的 Workflow,並在 Airflow 的網頁工具 (Web UI) 查看,方便處理複雜的工作流程,除此之外,Airflow 還有以下優點:

  • 全程使用 Python,不用另外學工具的程式語言
  • 可擴展性高,從小型工作流到處理幾百條工作流都能勝任
  • 可和大多數的軟體和資料庫整合
  • 社群活躍,討論度高,並持續更新中

Ref: airflow 官方文件

像是這個 Airflow 官網的範例,我們可以設定各項任務之間的順序,先執行 run_this_first 再執行 branching ,接著排程分開完成 branch_abranch_b ,最後 branch_a 再結合 branching 的資料,一起執行 join 的任務,每個任務之間的相依性都可以自己設定。