從 Bigtable 讀取資料至 Dataflow

儲存在 Bigtable 的作業資料通常需要處理、匯總或匯出,以便進行下游分析,同時不降低即時應用程式的效能。將 Bigtable 資料擷取至 Dataflow 後,您就能使用可擴充的平行管道,處理 ETL 工作流程、分析匯總和資料湖泊匯出作業的大量作業記錄。

如要建構自訂資料管道,可以使用 Apache Beam Bigtable I/O 連接器。如要執行將資料表匯出至 Cloud Storage 等常見工作,您也可以使用 Google 提供的 Dataflow 範本部署預先建構的管道,不必編寫自訂程式碼。

平行處理工作數量

平行處理工作數量由 Bigtable 叢集中的節點數控管。每個節點會管理一或多個鍵值範圍,但鍵值範圍可能會在節點之間移動,以進行負載平衡。詳情請參閱 Bigtable 說明文件中的「讀取和效能」。

系統會根據執行個體叢集中的節點數量計費。請參閱「Bigtable 定價」。

效能

下表列出 Bigtable 讀取作業的成效指標。這些工作負載是在一個 e2-standard2 worker 上執行,使用 Java 適用的 Apache Beam SDK 2.48.0。他們沒有使用 Portable Runner。

1 億筆記錄 | 1 KB | 1 個資料欄 處理量 (位元組) 處理量 (元素)
閱讀 180 MB/秒 每秒 170,000 個元素

這些指標是以簡單的批次管道為依據。這些基準旨在比較 I/O 連接器之間的效能,不一定代表實際的管道。Dataflow 管道效能相當複雜,取決於 VM 類型、處理的資料、外部來源和接收器的效能,以及使用者程式碼。這些指標是以執行 Java SDK 為基礎,無法代表其他語言 SDK 的效能特徵。詳情請參閱「Beam IO 效能」。

最佳做法

  • 如要建立新的管道,請使用 BigtableIO 連接器,而非 CloudBigtableIO。

  • 為每種管道建立不同的應用程式設定檔。應用程式設定檔可提供更完善的指標,區分管道之間的流量,以便提供支援及追蹤用量。

  • 監控 Bigtable 節點。如果遇到效能瓶頸,請檢查 Bigtable 內的 CPU 使用率等資源是否受限。詳情請參閱「監控」。

  • 一般來說,預設逾時時間已針對大多數管道進行調整。如果串流管道似乎卡在讀取 Bigtable 的階段,請嘗試呼叫 withAttemptTimeout 來調整嘗試逾時時間。

  • 建議您啟用 Bigtable 自動調度資源功能,或調整 Bigtable 叢集大小,以便配合 Dataflow 工作規模。

  • 建議您在 Dataflow 工作上設定 maxNumWorkers,限制 Bigtable 叢集的負載。

  • 如果在重組前對 Bigtable 元素進行大量處理,對 Bigtable 的呼叫可能會逾時。在這種情況下,您可以呼叫 withMaxBufferElementCount 來緩衝元素。這個方法會將讀取作業從串流轉換為分頁,避免發生問題。

  • 如果您使用單一 Bigtable 叢集處理串流和批次管道,且 Bigtable 端的效能降低,請考慮在叢集上設定複製功能。接著,請分隔批次和串流管道,讓兩者從不同的副本讀取資料。詳情請參閱「複製總覽」。

後續步驟