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 Connector リポジトリをご覧ください。コネクタの使用方法を示すコードサンプルについては、flink-examples-gcp-bigtable ディレクトリをご覧ください。

シリアライザー

Flink コネクタには、データを Bigtable ミューテーション エントリに変換するために使用できる 3 つの組み込みシリアライザーがあります。

  • GenericRecordToRowMutationSerializer: AVRO GenericRecord オブジェクトの場合
  • RowDataToRowMutationSerializer: Flink RowData オブジェクトの場合
  • 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 回限りの処理の概要をご覧ください。

次のステップ