Beam 的動態工作負載重新平衡

今天早上,Google Cloud Dataflow 團隊的 Eugene 和 Malo 發布了 不讓任何分片落後:Google Cloud Dataflow 中的動態工作負載重新平衡。這篇文章討論了 Cloud Dataflow 針對眾所周知的「落後者問題」的解決方案。

在一個大型批次處理作業中,許多任務並行執行,其中一些任務(即「落後者」)的完成時間可能比其他任務長得多,這可能是由於在發出作業時,將工作不完美地拆分為並行區塊所致。通常,等待落後者意味著整體作業完成時間會比應有的時間晚,並且還可能保留過多在最後可能未充分利用的機器。在大多數情況下,Cloud Dataflow 的動態工作負載重新平衡可以減輕落後者的影響。

我想為 Apache Beam (孵化中) 社群強調的是,Cloud Dataflow 的動態工作負載重新平衡是使用 Beam 的與執行器無關BoundedSource API 之上的特定於執行器的控制邏輯來實作的。具體來說,為了從落後者那裡竊取工作,執行器只需要呼叫讀取器的 splitAtFraction 方法。這將生成一個新的來源,其中包含剩餘的工作,然後執行器可以將該來源傳遞給另一個閒置的工作程序。隨著 Beam 的成熟,我希望其他執行器有興趣弄清楚這些 API 是否可以幫助他們提高效能,實作動態工作負載重新平衡,並協作進行 API 更改,這將有助於解決其他痛點。