Flink Bigtable 連接器

Apache Flink 是一種串流處理架構,可讓您即時操控資料。如果您有 Bigtable 資料表,可以使用 Flink Bigtable 連接器,將指定資料來源的資料串流、序列化及寫入 Bigtable。您可以使用 Apache Flink Table API 或 Datastream API,透過這個連接器執行下列操作:

  1. 建立管道
  2. 將資料來源中的值序列化為 Bigtable 突變項目
  3. 將這些項目寫入 Bigtable 資料表

本文說明 Flink Bigtable 連接器,以及使用前須知。閱讀本文之前,請先熟悉 Apache FlinkBigtable 儲存模型Bigtable 寫入作業

如要使用連接器,您必須先建立 Bigtable 資料表,做為資料接收器。您必須先建立資料表的資料欄系列,才能啟動管道;資料欄系列無法在寫入時建立。詳情請參閱「建立及管理資料表」。

您可以在 GitHub 取得連接器。如要瞭解如何安裝連接器,請參閱 Flink Bigtable 連接器存放區。如需示範如何使用連接器的程式碼範例,請參閱 flink-examples-gcp-bigtable 目錄。

序列化器

Flink 連接器內建三種序列化程式,可用於將資料轉換為 Bigtable 變異項目:

  • GenericRecordToRowMutationSerializer:適用於 AVRO GenericRecord 物件
  • RowDataToRowMutationSerializer:適用於 Flink RowData 物件
  • FunctionRowMutationSerializer:使用提供的函式進行自訂序列化邏輯

您也可以選擇建立自己的自訂序列化程式,並從 BaseRowMutationSerializer 繼承。

序列化模式

使用 Flink 連接器時,您可以選擇下列其中一種序列化模式。模式會指定來源資料的序列化方式,以代表 Bigtable 資料欄系列,然後寫入 Bigtable 資料表。您必須使用其中一種模式。

資料欄系列模式

在資料欄系列模式中,所有資料都會寫入單一指定資料欄系列。 不支援巢狀欄位。

巢狀資料列模式

在巢狀資料列模式中,每個頂層欄位都代表一個資料欄系列。頂層欄位 (RowKeyField) 的值是另一個欄位。該欄位的值會為 Bigtable 資料欄系列中的每個資料欄提供一個資料列物件。在巢狀資料列模式中,除了頂層欄位以外,所有欄位都必須是資料列物件。系統不支援雙層巢狀列。

僅需處理一次

在 Apache Flink 中,「僅需處理一次」是指系統會處理串流中的每筆資料記錄一次,即使發生系統故障,也能避免重複處理或遺失資料。

Bigtable mutateRow 變異預設為等冪,因此即使重試,具有相同資料列鍵、資料欄系列、資料欄、時間戳記和值的寫入要求也不會建立新儲存格。也就是說,只要您使用 Bigtable 做為 Apache Flink 架構的資料接收器,且未在重試時變更時間戳記,管道的其餘部分也符合「只處理一次」的要求,系統就會自動提供「只處理一次」的行為。

如要進一步瞭解「僅需處理一次」語意,請參閱「Apache Flink 中的端對端『僅需處理一次』處理作業總覽」。

後續步驟