變更串流總覽

Bigtable 提供變更資料擷取 (CDC) 功能,也就是變更串流。變更串流會在 Bigtable 資料表發生資料異動時擷取異動,方便您串流處理或分析這些異動。

本文將概略介紹 Bigtable 變更串流。閱讀本文之前,請先熟悉 Bigtable 總覽

變更串流適用於 CDC 用途,包括:

  • 在發生指定變更時觸發下游應用程式邏輯
  • 整合資料分析管道
  • 支援稽核和封存需求

變更串流的定義

變更串流會追蹤使用者或應用程式在資料表層級所做的變更,通常是使用其中一個 Cloud Bigtable 用戶端程式庫。系統也會擷取垃圾收集變更。

系統會將套用至啟用變更串流資料表的變更,儲存為資料變更記錄。資料變更記錄包括下列項目套用的資料變更:

  • 使用 Cloud Bigtable API 方法 MutateRowMutateRowsCheckAndMutateRowReadModifyWriteRow 傳送的寫入、刪除和更新作業
  • 因垃圾收集而刪除的項目
  • 使用 Admin API 的 DropRowRange 方法刪除的資料列

如要進一步瞭解可傳送至 Bigtable 資料表的變更類型,請參閱「讀取」、「寫入」、「刪除」和「垃圾收集總覽」。

變更串流不會追蹤結構定義異動,例如新增或修改資料欄系列,也不會追蹤複寫拓撲,例如新增或移除叢集。

每個資料列鍵和每個叢集的資料變更記錄,都會依提交時間戳記排序。不過,不同資料列鍵或叢集的資料變更記錄不保證會依序排列。

您可以在資料表上啟用變更串流,並指定 1 到 7 天的保留期限。

資料變更記錄的內容

每個資料變更記錄都包含以不可分割方式套用至資料列的所有變更,這些變更是單一 RPC 呼叫的一部分。

如果值遭到覆寫,系統會在資料變更記錄中記錄新寫入的值。資料變更記錄不含舊值

資料變更記錄會在變更套用至第一個接收變更的叢集時,收到時間戳記,稱為「提交時間戳記」。舉例來說,假設某個執行個體有兩個叢集。如果您將寫入要求傳送至叢集 A 上的資料表 1,系統會在叢集 A 收到寫入要求時,指派資料變更記錄提交時間戳記,而叢集 B 上這項寫入作業的資料變更記錄也會有相同的提交時間戳記。

每筆資料變更記錄都包含下列資訊:

  • 項目 - 對資料列所做的變更,包括下列一或多項:
    • 寫入
      • 資料欄系列
      • 資料欄限定詞
      • 時間戳記
    • 刪除儲存格
      • 資料欄系列
      • 資料欄限定詞
      • 時間戳記範圍
    • 刪除資料欄系列
      • 資料欄系列
      • 從資料列刪除資料 - 系統會將從資料列刪除資料的作業,轉換為從資料列中含有資料的每個資料欄系列刪除資料的作業清單。
  • 資料列索引鍵 - 已變更資料列的 ID
  • 變更類型 - 使用者啟動或垃圾收集
  • 接收變更的叢集 ID
  • 修訂時間戳記 - 變更修訂到資料表時的伺服器端時間
  • 解決平手情況 - 應用程式讀取串流時,可使用 Bigtable 的內建衝突解決政策
  • 權杖 - 供取用應用程式在串流中斷時繼續串流
  • 預估低水位線 - 記錄分割區趕上所有叢集複寫作業的預估時間。詳情請參閱分割區浮水印

如要進一步瞭解資料變更記錄中的欄位,請參閱 DataChange 的 API 參考資料。

變更串流儲存空間

資料表及其變更串流共用相同的叢集層級資源,包括節點和儲存空間。因此,變更串流資料儲存空間屬於資料表的儲存空間。如果執行個體使用複製功能,系統會將變更串流的資料副本儲存在執行個體中,含有啟用變更串流功能的資料表的所有叢集。

變更串流資料使用的儲存空間不會計入總儲存空間使用率 (最大百分比)。因此,您不需要新增節點來處理變更串流資料消耗的儲存空間 (不過您可能需要新增節點來增加運算能力)。不過,系統會根據變更串流資料占用的儲存空間計費。詳情請參閱「費用考量」。

讀取變更串流

如要讀取 (串流) 變更串流,您必須使用設定為單一叢集轉送的應用程式設定檔,而且如果使用 Dataflow 串流,則必須啟用單一資料列交易。

如要進一步瞭解轉送政策,請參閱轉送選項

如要進一步瞭解單列交易,請參閱單列交易

Cloud Bigtable API (Data API) 提供變更串流方法。建議您使用下列任一選項,不要在不使用用戶端程式庫或連接器的情況下呼叫 API:

  • Dataflow 範本
  • Bigtable Beam 連接器
  • Java 用戶端程式庫

所有選項都能避免因分割和合併而需要追蹤及處理分割區變更

詳情請參閱 ReadChangeStream

Dataflow 範本

您可以使用 Google 提供的下列其中一個 Dataflow 範本:

Bigtable Beam 連接器

您可以使用 Bigtable Beam 連接器建構管道:

如果不想自行建構管道,可以從 Bigtable 教學課程或快速入門導覽課程中的程式碼範例著手:

Java 用戶端程式庫

分區

為維持與高寫入或變更率相符的高讀取輸送量,Bigtable 會將變更串流劃分為多個分區,可用於平行讀取變更串流。每個變更串流分割區都與一個子表相關聯。子表是資料表的子區段,會視需要重新分配,以協助平衡資料表的請求工作負載。詳情請參閱負載平衡

您可以使用 Java 用戶端程式庫查詢每個分區的變更,並取得管理分區變更所需的資訊 (因分割和合併而異)。

浮水印

浮水印是時間戳記,用於估算分區最近在所有叢集中的複製作業進度。分割區的水印會在複製作業進行時持續更新,並隨著時間推進。

每個 ChangeStreamMutation (資料變更記錄) 都包含 estimatedLowWatermark 欄位,這是與資料變更記錄相關聯的分區浮水印。這項 estimatedLowWatermark 是預估值,無法保證串流中沒有尚未送達的資料。

備用資料表的水印

如果分區的複寫作業尚未完全完成,分區的 estimatedLowWatermark (低水位線) 就不會前進。如果任何分區的水印未向前移動,整個串流的低水位線 (所有分區層級預估低水位線的最低值) 就會停止前進。如果浮水印停止前進,即視為「停滯」。發生這種情況時,如果您在管道中串流傳輸變更串流,管道就會停止運作。

許多因素都可能導致一或多個分割區層級的水印停滯一段時間,包括:

  • 流量過多導致叢集過載,造成一或多個分區的複寫作業延遲
  • 網路延遲
  • 叢集無法使用

Bigtable Beam 連接器會為所有資料將輸出時間戳記設為零,藉此處理這項問題。詳情請參閱「不使用事件時間分組資料」。

監控

為協助您瞭解啟用變更串流功能後,含有變更串流啟用資料表的執行個體 CPU 和儲存空間使用率會受到什麼影響,我們提供兩項變更串流專屬指標。您可以在 Bigtable 系統洞察頁面查看指標,也可以使用 Cloud Monitoring 系列工具。

如要進一步瞭解這些指標,請參閱「監控」。

費用注意事項

在資料表上啟用變更串流會導致節點和儲存空間的費用增加。尤其是儲存空間費用可能會增加。

節點

您通常需要將節點新增至叢集 (或在使用自動調度資源時增加節點數量上限),才能處理啟用及處理資料變更記錄時產生的額外流量。

啟用變更串流後,即使您尚未開始處理,CPU 用量也會增加約 10%。處理變更串流 (例如使用 Dataflow 管道讀取),可能會使 CPU 使用率增加約 20% 至 30%,視變更活動的程度和串流資料的讀取方式而定。

儲存空間

系統會按照標準 Bigtable 儲存空間費率,收取儲存資料表資料變更記錄的費用。此外,您也需要付費儲存用於追蹤變更串流中繼資料的資料表。您指定的保留期限會直接影響儲存空間費用。

一般來說,一天的資料變更記錄 (僅反映當天發生的變更) 所占用的儲存空間,約為當天寫入磁碟的資料量的 1.5 倍。

網路資料移轉

如果您跨區域讀取變更串流,可能會產生該流量的費用。如需網路資料移轉費率的完整清單,請參閱 Bigtable 定價頁面的「網路」一節。

處理費用

視您讀取資料變更記錄的方式而定,除了 Bigtable 以外,其他服務也會產生額外費用。舉例來說,如果您使用 Dataflow,則需支付處理的位元組費用,以及處理工作的機器費用。詳情請參閱 Dataflow 定價

捨棄資料列範圍

如果可以,請避免從已啟用變更串流的資料表刪除資料列範圍。如果必須捨棄資料列範圍,請注意,Bigtable 可能需要很長時間才能完成這項作業,且作業期間 CPU 使用率會提高。

後續步驟