使用 GroupIntoBatches 轉換分組元素以有效率地呼叫外部服務

通常,編寫 Apache Beam 管道可以使用現成的工具和轉換,例如 ParDoWindowGroupByKey。但是,當您想要更嚴格的控制時,您可以將狀態保留在原本無狀態的 DoFn 中。

狀態是按每個鍵和每個視窗維護的,因此,您有狀態的 DoFn 的輸入需要鍵控(例如,如果您正在追蹤電子商務網站的點擊次數,則按客戶識別碼)。

使用案例範例包括:為每個元素指派唯一的 ID、以「更特殊」的方式聯結資料串流,或將 API 呼叫批次處理到外部服務。在本節中,我們將特別介紹最後一個。

請務必查看 文件,以更深入瞭解狀態和計時器。

GroupIntoBatches 轉換在底層使用狀態和計時器,讓使用者可以嚴格控制下列參數

同時從使用者抽象化實作細節。

withShardedKey() 功能藉由將一個鍵分散到多個執行緒來提高並行性。

這些轉換在 Java 和 Python 中以下列方式使用

input.apply(
          "Batch Contents",
          GroupIntoBatches.<String, GenericJson>ofSize(batchSize)
              .withMaxBufferingDuration(maxBufferingDuration)
              .withShardedKey())
input | GroupIntoBatches.WithShardedKey(batchSize, maxBufferingDuration)

應用這些轉換會按每個鍵輸出批次中的元素群組,然後您可以使用這些元素群組大量呼叫外部 API,而不是按每個元素呼叫,從而降低管道的額外負荷。