釐清並正式化執行器功能

隨著初始程式碼發布完成 (Dataflow SDK 和執行器Flink 執行器Spark 執行器) 以及對於 StormHadoopGearpump(以及其他)執行器實作的興趣,我們想開始解決 Apache Beam(孵化中)社群中的一個大問題:每個執行器將能夠支援哪些功能?

雖然我們希望有一個所有執行器都支援 Beam 模型(以前稱為 Dataflow 模型)中包含的完整語意套件的世界,但實際上,總會有一些功能是某些執行器無法提供的。例如,基於 Hadoop 的執行器本質上是批次處理的,可能無法(輕易地)實作對無界集合的支援。然而,這並不妨礙它對大量用途極其有用。在其他情況下,一個執行器提供的實作可能具有與另一個執行器提供的語意略有不同的語意(例如,即使目前的執行器套件都支援恰好一次的交付保證,Apache Samza 執行器 (將會是個受歡迎的補充),目前只會支援至少一次)。

為了幫助釐清情況,我們一直在努力在 功能矩陣中列舉 Beam 模型的主要功能,適用於所有現有的執行器,並圍繞模型解決的四個關鍵問題進行分類:什麼 / 在哪裡 / 何時 / 如何(如果您不熟悉這些問題,您可能想閱讀 串流 102 以獲得概述)。隨著模型不斷演變、我們的理解加深以及執行器的建立或功能的添加,此表格將會隨著時間的推移而維護。

以下包含我們目前對現有執行器功能的理解的摘要快照(請參閱即時版本以獲取完整詳細資料、說明和 Jira 連結);由於整合仍在進行中,整個系統尚未處於完全穩定、可用的狀態。但這種情況在不久的將來應該會改變,當第一個支援的 Beam 1.0 版本發佈時,我們會在部落格上大聲且清楚地更新此資訊。

同時,這些表格應該有助於釐清我們預期在短期內將會達到的目標,並有助於引導大家對於現有執行器能夠做什麼以及執行器實作者接下來將要解決的功能的期望。

Beam 模型Google Cloud DataflowApache FlinkApache Spark
ParDo
GroupByKey
~
Flatten
Combine
複合轉換
~
~
~
側邊輸入
~
~
來源 API
~
聚合器
~
~
~
~
鍵控狀態
Beam 模型Google Cloud DataflowApache FlinkApache Spark
全域視窗
固定視窗
~
滑動視窗
會話視窗
自訂視窗
自訂合併視窗
時間戳記控制
Beam 模型Google Cloud DataflowApache FlinkApache Spark
可配置的觸發器
事件時間觸發器
處理時間觸發器
計數觸發器
[元]資料驅動觸發器
複合觸發器
允許延遲
計時器
Beam 模型Google Cloud DataflowApache FlinkApache Spark
捨棄
累積
累積和撤回
Beam 模型Google Cloud DataflowApache FlinkApache Spark
基本
~
~
側邊輸入
~
~
可分割 DoFn 發起的檢查點
~
~
動態分割
~
捆綁最終化
~
Beam 模型Google Cloud DataflowApache FlinkApache Spark
基本
~
側邊輸入
可分割 DoFn 發起的檢查點
~
動態分割
捆綁最終化
~