不多說,直接上干貨!
Apache Beam是一個開源的數據處理編程庫,由Google貢獻給Apache的項目,前不久剛剛成為Apache TLP項目。它提供了一個高級的、統一的編程模型,允許我們通過構建Pipeline的方式實現批量、流數據處理,並且構建好的Pipeline能夠運行在底層不同的執行引擎上。剛剛接觸該開源項目時,我的第一感覺就是:在編程API的設計上,數據集及其操作的抽象有點類似Apache Crunch(MapReduce Pipeline編程庫)項目;而在支持統一數據處理模型上,能夠讓人想到Apache Flink項目。如果深入了解Apache Beam,你會發現未來Apache Beam很可能成為數據處理領域唯一一個能夠將不同的數據應用統一起來的編程庫。
Apache Beam架構概覽
Apache Beam目前最新版本為2.1.1-SNAPSHOT,最新的Release版本為2.0.0,很多特性還在開發中。
在網上找到一個由Andrew Psaltis在2016年6月份演講的《Apache Beam: The Case for Unifying Streaming API’s》,引用了其中一個Apache Beam的架構圖,如下圖所示:
上圖中,我們可以看到,Apache Beam核心的主要有兩層:
- Pipeline構建層
在Pipeline構建層,針對不同的編程語言,構建一組用於定義Pipeline相關抽象,提供編程API,這一層被稱為Beam SDKs。最終的用戶(具有不同編程語言技能的人員)可以基於這些抽象的Beam SDK來構建數據處理Pipeline。
- Runner適配層
Runner適配層,主要是用來對接底層的計算引擎,用來執行上層用戶開發好的Pipeline程序。