Flink Bigtable 連接器
Apache Flink 是一種串流處理架構,可讓您即時操控資料。如果您有 Bigtable 資料表,可以使用 Flink Bigtable 連接器,將指定資料來源的資料串流、序列化及寫入 Bigtable。您可以使用 Apache Flink Table API 或 Datastream API,透過這個連接器執行下列操作:
- 建立管道
- 將資料來源中的值序列化為 Bigtable 突變項目
- 將這些項目寫入 Bigtable 資料表
本文說明 Flink Bigtable 連接器,以及使用前須知。閱讀本文之前,請先熟悉 Apache Flink、Bigtable 儲存模型和 Bigtable 寫入作業。
如要使用連接器,您必須先建立 Bigtable 資料表,做為資料接收器。您必須先建立資料表的資料欄系列,才能啟動管道;資料欄系列無法在寫入時建立。詳情請參閱「建立及管理資料表」。
您可以在 GitHub 取得連接器。如要瞭解如何安裝連接器,請參閱 Flink Bigtable 連接器存放區。如需示範如何使用連接器的程式碼範例,請參閱 flink-examples-gcp-bigtable 目錄。
序列化器
Flink 連接器內建三種序列化程式,可用於將資料轉換為 Bigtable 變異項目:
GenericRecordToRowMutationSerializer
:適用於 AVROGenericRecord
物件RowDataToRowMutationSerializer
:適用於 FlinkRowData
物件FunctionRowMutationSerializer
:使用提供的函式進行自訂序列化邏輯
您也可以選擇建立自己的自訂序列化程式,並從 BaseRowMutationSerializer
繼承。
序列化模式
使用 Flink 連接器時,您可以選擇下列其中一種序列化模式。模式會指定來源資料的序列化方式,以代表 Bigtable 資料欄系列,然後寫入 Bigtable 資料表。您必須使用其中一種模式。
資料欄系列模式
在資料欄系列模式中,所有資料都會寫入單一指定資料欄系列。 不支援巢狀欄位。
巢狀資料列模式
在巢狀資料列模式中,每個頂層欄位都代表一個資料欄系列。頂層欄位 (RowKeyField) 的值是另一個欄位。該欄位的值會為 Bigtable 資料欄系列中的每個資料欄提供一個資料列物件。在巢狀資料列模式中,除了頂層欄位以外,所有欄位都必須是資料列物件。系統不支援雙層巢狀列。
僅需處理一次
在 Apache Flink 中,「僅需處理一次」是指系統會處理串流中的每筆資料記錄一次,即使發生系統故障,也能避免重複處理或遺失資料。
Bigtable mutateRow
變異預設為等冪,因此即使重試,具有相同資料列鍵、資料欄系列、資料欄、時間戳記和值的寫入要求也不會建立新儲存格。也就是說,只要您使用 Bigtable 做為 Apache Flink 架構的資料接收器,且未在重試時變更時間戳記,管道的其餘部分也符合「只處理一次」的要求,系統就會自動提供「只處理一次」的行為。
如要進一步瞭解「僅需處理一次」語意,請參閱「Apache Flink 中的端對端『僅需處理一次』處理作業總覽」。