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 テーブルが必要です。パイプラインを開始する前に、テーブルの列ファミリーを作成する必要があります。列ファミリーは書き込み時に作成できません。詳細については、テーブルの作成と管理をご覧ください。

このコネクタは Apache Flink バージョン 2.1.0 と互換性があり、GitHub で入手できます。コネクタのインストールについては、Flink Bigtable Connector リポジトリをご覧ください。コネクタの使用方法を示すコードサンプルについては、flink-examples-gcp-bigtable ディレクトリをご覧ください。

シリアライザー

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

  • GenericRecordToRowMutationSerializer: AVRO GenericRecord オブジェクトの場合
  • RowDataToRowMutationSerializer: Flink RowData オブジェクトの場合
  • FunctionRowMutationSerializer: 提供された関数を使用するカスタム シリアル化ロジックの場合

BaseRowMutationSerializer から継承する独自のカスタム シリアライザーを作成することもできます。

シリアル化モード

Flink コネクタを使用する場合は、2 つのシリアル化モードのいずれかを選択します。モードは、ソースデータを Bigtable テーブルの列ファミリーに書き込まれるミューテーション エントリにシリアル化する方法を指定します。どちらかのモードを使用する必要があります。

列ファミリー モード

列ファミリー モードでは、すべてのデータが指定された単一の列ファミリーに書き込まれます。ネストされたフィールドはサポートされていません。

ネストされた行モード

ネストされた行モードでは、最上位の各フィールドは列ファミリーを表します。最上位フィールド(RowKeyField)の値は別のフィールドです。このフィールドの値には、Bigtable 列ファミリーの各列の行オブジェクトがあります。ネストされた行モードでは、トップレベル フィールド以外のすべてのフィールドは行オブジェクトである必要があります。二重にネストされた行はサポートされていません。

構成オプション

コネクタのパフォーマンスと動作を構成するには、いくつかのオプションを使用できます。これらのオプションの詳細については、GitHub のコネクタのドキュメントをご覧ください。

1 回限りの処理

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

Bigtable の mutateRow ミューテーションはデフォルトでべき等であるため、同じ行キー、列ファミリー、列、タイムスタンプ、値を持つ書き込みリクエストは、再試行されても新しいセルを作成しません。Apache Flink フレームワークのデータシンクとして Bigtable を使用すると、次の条件が満たされている限り、1 回限りの動作が自動的に実現されます。

  • 再試行でサーバーサイドのタイムスタンプ(-1)を使用するようにタイムスタンプを設定していません。
  • パイプラインの残りの部分は exactly-once 要件を満たしています。

1 回限りのセマンティクスの詳細については、Apache Flink でのエンドツーエンドの 1 回限りの処理の概要をご覧ください。

次のステップ