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 Connector リポジトリをご覧ください。コネクタの使用方法を示すコードサンプルについては、flink-examples-gcp-bigtable ディレクトリをご覧ください。
シリアルライザ
Flink コネクタには、データを Bigtable ミューテーション エントリに変換するために使用できる 3 つの組み込みシリアライザーがあります。
GenericRecordToRowMutationSerializer
: AVROGenericRecord
オブジェクトの場合RowDataToRowMutationSerializer
: FlinkRowData
オブジェクトの場合FunctionRowMutationSerializer
: 指定された関数を使用するカスタム シリアル化ロジックの場合
BaseRowMutationSerializer
から継承する独自のカスタム シリアライザを作成することもできます。
シリアル化モード
Flink コネクタを使用する場合は、2 つのシリアル化モードのいずれかを選択します。モードは、Bigtable 列ファミリーを表すようにソースデータがシリアル化され、Bigtable テーブルが書き込まれる方法を指定します。どちらか一方のモードを使用する必要があります。
列ファミリー モード
列ファミリー モードでは、すべてのデータが指定された単一の列ファミリーに書き込まれます。ネストされたフィールドはサポートされていません。
ネストされた行モード
ネストされた行モードでは、各最上位フィールドは列ファミリーを表します。最上位フィールド(RowKeyField)の値は別のフィールドです。このフィールドの値には、Bigtable 列ファミリーの各列の行オブジェクトがあります。ネストされた行モードでは、トップレベル フィールド以外のすべてのフィールドが行オブジェクトである必要があります。2 重にネストされた行はサポートされていません。
1 回限りの処理
Apache Flink の exactly-once とは、ストリーム内の各データレコードが 1 回だけ処理されることを意味します。これにより、システム障害が発生した場合でも、重複処理やデータ損失を防ぐことができます。
Bigtable mutateRow
ミューテーションはデフォルトでべき等であるため、行キー、列ファミリー、列、タイムスタンプ、値が同じ書き込みリクエストは、再試行しても新しいセルは作成されません。つまり、Apache Flink フレームワークのデータシンクとして Bigtable を使用する場合、再試行でタイムスタンプを変更せず、パイプラインの残りの部分も exactly-once 要件を満たしていれば、exactly-once 動作が自動的に得られます。
exactly-once セマンティクスの詳細については、Apache Flink におけるエンドツーエンドの exactly-once 処理の概要をご覧ください。