部落格
2017/01/09
版本 0.4.0 新增了 Apache Apex 的執行器
Apache Beam 的最新版本 0.4.0 新增了 Apache Apex 的新執行器。 我們很高興能達到這個初步的里程碑,並期待 Beam 和 Apex 社群之間持續合作,以推進執行器的發展。
Beam 從 Google Dataflow SDK 演變而來,作為孵化專案,它迅速採用了 Apache 的方式,擴大了社群,並吸引了越來越多希望從一個概念強大、統一的程式設計模型中受益的使用者,該模型可以在不同的巨量資料處理框架之間移植(請參閱 串流 101 和 串流 102)。許多 Apache 專案已經為 Beam 提供了執行器(請參閱 執行器和功能矩陣)。
Apex 是一個串流處理框架,用於在叢集上低延遲、高輸送量、有狀態和可靠地處理複雜的分析管道。 Apex 自 2012 年以來一直在開發,並被大型公司用於大規模的即時和批次處理。
執行器的初始修訂版著重於在功能層面上廣泛涵蓋 Beam 模型。 這意味著,在將執行器從功能性轉變為可擴展和高效能以匹配 Apex 及其原生 API 的能力方面,還有許多後續工作。 執行器功能矩陣顯示,Apex 的功能與 Beam 模型非常一致。 具體而言,以容錯和高效的方式追蹤計算狀態的能力,對於廣泛支援視窗概念(包括基於事件時間的處理)是必要的。
有狀態的串流處理器
Apex 從頭開始構建為有狀態的串流處理器。運算符以分散式和非同步的方式檢查點狀態,為整個處理圖產生一致的快照,可用於恢復。 Apex 還支援以增量或精細的方式進行此類恢復。 這意味著,只有受故障影響的 DAG 部分會被恢復,而其餘的管道繼續處理(這可以被利用來實施有特殊需求的用例,例如投機執行以實現處理延遲的 SLA)。 狀態檢查點與冪等處理保證是 Apex 中 exactly-once 結果支援的基礎。
翻譯成 Apex DAG
Beam 執行器需要實現從 Beam 模型到底層框架執行模型的轉換。 在 Apex 的情況下,執行器會將管道轉換為原生(組合式、低階)DAG API(這也是許多其他可用於指定在 Apex 上運行的應用程式的 API 的基礎)。 DAG 由運算符(與串流連接的功能性構建模組)組成。 執行器提供執行層。 在 Apex 的情況下,它是分散式串流處理,運算符逐個處理資料事件。 最少的一組運算符涵蓋 Beam 的基本轉換:ParDo.Bound
、ParDo.BoundMulti
、Read.Unbounded
、Read.Bounded
、GroupByKey
、Flatten.FlattenPCollectionList
等。
執行和測試
在此版本中,Apex 執行器以嵌入模式執行管道,類似於直接執行器,所有內容都在單個 JVM 中執行。 請參閱 快速入門,了解如何使用 Apex 執行器執行 Beam 範例。
嵌入模式對於開發和除錯很有用。 在生產中,Apex 在 Apache Hadoop YARN 叢集上分散式運行。 有關如何將 Beam 管道嵌入到 Apex 應用程式套件中以在 YARN 上運行的範例,請參閱 這裡,並且目前正在開發在執行器中直接啟動的支援。
Beam 專案非常注重開發流程和工具,包括測試。 對於執行器,有一個包含 200 多個整合測試的綜合測試套件,這些測試針對每個執行器執行,以確保它們不會隨著更改而損壞。 這些測試涵蓋了矩陣的功能,因此可以衡量執行器實作的完整性和正確性。 這個套件在開發 Apex 執行器時非常有幫助。
展望
下一步是將 Apex 執行器從功能性提升到準備好運行分散式的實際應用程式,利用 Apex 的可擴展性和效能特性,類似於其原生 API。 這包括鏈接 ParDos、分區、優化組合操作等。 如要參與,請參閱 JIRA 並加入 Beam 社群。