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 列ファミリーの各列の行オブジェクトがあります。ネストされた行モードでは、トップレベル フィールド以外のすべてのフィールドは行オブジェクトである必要があります。二重にネストされた行はサポートされていません。
1 回限りの処理
Apache Flink の exactly once は、ストリーム内の各データレコードが 1 回だけ処理されることを意味します。これにより、システム障害が発生した場合でも、重複処理やデータ損失を防ぐことができます。
Bigtable の mutateRow
ミューテーションはデフォルトでべき等であるため、同じ行キー、列ファミリー、列、タイムスタンプ、値を持つ書き込みリクエストは、再試行されても新しいセルを作成しません。つまり、Apache Flink フレームワークのデータシンクとして Bigtable を使用する場合、再試行でタイムスタンプを変更せず、パイプラインの残りの部分も 1 回限りの要件を満たしていれば、1 回限りの動作が自動的に実現されます。
1 回限りのセマンティクスの詳細については、Apache Flink でのエンドツーエンドの 1 回限りの処理の概要をご覧ください。