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 列ファミリーの各列の行オブジェクトがあります。ネストされた行モードでは、トップレベル フィールド以外のすべてのフィールドが行オブジェクトである必要があります。2 重にネストされた行はサポートされていません。

1 回限りの処理

Apache Flink の exactly-once とは、ストリーム内の各データレコードが 1 回だけ処理されることを意味します。これにより、システム障害が発生した場合でも、重複処理やデータ損失を防ぐことができます。

Bigtable mutateRow ミューテーションはデフォルトでべき等であるため、行キー、列ファミリー、列、タイムスタンプ、値が同じ書き込みリクエストは、再試行しても新しいセルは作成されません。つまり、Apache Flink フレームワークのデータシンクとして Bigtable を使用する場合、再試行でタイムスタンプを変更せず、パイプラインの残りの部分も exactly-once 要件を満たしていれば、exactly-once 動作が自動的に得られます。

exactly-once セマンティクスの詳細については、Apache Flink におけるエンドツーエンドの exactly-once 処理の概要をご覧ください。

次のステップ