Realtime Compute for Apache Flink は Flink CDC を使用してデータインジェストを実行します。YAML ジョブを開発することで、ソースから sink へ効率的にデータを同期できます。このトピックでは、Flink CDC データインジェストジョブの開発方法について説明します。
背景情報
Flink CDC データインジェストは、Flink CDC を使用してデータ統合を簡素化します。YAML を使用して複雑な ETL プロセスを定義し、それらを自動的に Flink のランタイムロジックに変換することで、データベース全体の同期、シャーディングされたテーブルの同期、スキーマ進化、計算列などの機能を実現できます。このアプローチにより、データ統合プロセスが大幅に簡素化され、効率と信頼性が向上します。
Flink CDC の利点
Realtime Compute for Apache Flink では、Flink CDC データインジェストジョブ、SQL ジョブ、または DataStream ジョブを開発してデータ同期を実行できます。以下のセクションでは、他の 2 つの開発メソッドに対する Flink CDC データインジェストジョブの利点について説明します。
Flink CDC と Flink SQL の比較
Flink CDC データインジェストジョブと Flink SQL ジョブでは、転送されるデータの種類が異なります:
SQL ジョブは
RowDataを転送します。各行には変更タイプがあります:insert (+I)、update before (-U)、update after (+U)、または delete (-D)。Flink CDC ジョブは
SchemaChangeEventを使用して、テーブル作成、列追加、テーブル切り捨てなどのスキーマ進化情報を転送します。DataChangeEventを使用して、insert、update、delete などのデータ変更を転送します。update メッセージには行の変更前と変更後の両方の状態が含まれており、元の変更データを sink に書き込むことができます。
次の表に、SQL ジョブに対する Flink CDC データインジェストジョブの利点を示します。
Flink CDC | Flink SQL |
スキーマを自動的に検出し、データベース全体の同期をサポート | 手動での |
複数のスキーマ進化ポリシーをサポート | スキーマ進化をサポートしない |
元のチェンジログを保持 | 元のチェンジログ構造を破壊 |
複数のテーブルからの読み取りと書き込みが可能 | 単一テーブルからの読み取りと書き込みのみ可能 |
CTAS 文または CDAS 文と比較して、Flink CDC ジョブには次の利点があります:
新しいデータ書き込みがプロセスをトリガーするのを待つことなく、アップストリームのスキーマ進化を即座に同期します。
元のチェンジログを保持し、
UPDATEメッセージは分割されません。TRUNCATE TABLEやDROP TABLEなど、より多くの種類のスキーマ進化を同期します。テーブルマッピングをサポートし、sink テーブル名を柔軟に定義できます。
ユーザーが構成可能な柔軟なスキーマ進化の動作をサポートします。
WHERE句を使用したデータフィルタリングをサポートします。列のプルーニングをサポートします。
Flink CDC と Flink DataStream の比較
次の表に、DataStream ジョブに対する Flink CDC データインジェストジョブの利点を示します。
Flink CDC | Flink DataStream |
専門家だけでなく、あらゆるスキルレベルのユーザー向けに設計 | Java と分散システムの専門知識が必要 |
低レベルの詳細を隠蔽し、開発を簡素化 | Flink フレームワークに精通している必要がある |
YAML フォーマットは理解しやすく、学習が容易 | 依存関係を管理するために Maven などのツールが必要 |
既存のジョブは再利用が容易 | 既存のコードは再利用が困難 |
制限事項
Flink CDC データインジェストジョブを開発するには、Ververica Runtime (VVR) 11.1 以降を使用してください。VVR 8.x バージョンを使用する必要がある場合は、VVR 8.0.11 を使用してください。
各ジョブは 1 つのソースと 1 つの sink のみをサポートします。複数のソースから読み取る、または複数の sink に書き込むには、複数の Flink CDC ジョブを作成する必要があります。
Flink CDC ジョブはセッションクラスターにデプロイできません。
Flink CDC ジョブは自動チューニングをサポートしていません。
Flink CDC データインジェストコネクタ
Flink CDC データインジェストのソースおよび sink としてサポートされているコネクタのリストについては、「サポートされているコネクタ」をご参照ください。
Flink CDC データインジェストジョブの作成
テンプレートから作成
対象のワークスペースの[アクション] 列で、[コンソール] をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
をクリックし、次に [テンプレートから新規作成] をクリックします。データ同期テンプレートを選択します。
現在、MySQL から StarRocks、MySQL から Paimon、MySQL から Hologres へのテンプレートが利用可能です。

ジョブ名、ストレージの場所、エンジンバージョンなどのジョブ情報を入力し、[OK] をクリックします。
Flink CDC ジョブのソースと sink の情報を構成します。
パラメーター構成の詳細については、対応するコネクタのドキュメントをご参照ください。
CTAS/CDAS から作成
ジョブに複数の
CTASまたはCDAS文が含まれている場合、Flink は最初のものだけを検出して変換します。Flink SQL と Flink CDC ではビルトイン関数のサポートに違いがあるため、生成された
transformルールがそのままでは機能しない場合があります。必要に応じて確認し、調整する必要があります。ソースが MySQL で、元の
CTAS/CDASジョブがまだ実行中の場合は、競合を避けるために Flink CDC データインジェストジョブのソースのserver-idを調整する必要があります。
対象のワークスペースの[アクション] 列で、[コンソール] をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
をクリックし、次に [CTAS/CDAS ジョブから新規作成] をクリックします。 対象の CTAS または CDAS ジョブを選択し、[OK] をクリックします。選択ページには、有効な CTAS および CDAS ジョブのみが表示されます。通常の ETL ジョブや構文エラーのあるドラフトは表示されません。
ジョブ名、ストレージの場所、エンジンバージョンなどを含むジョブ情報を入力し、[OK] をクリックします。
オープンソースから作成
対象のワークスペースの[アクション] 列で、[コンソール] をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
をクリックし、[新規データ取り込みドラフト] を選択し、[ファイル名] と [エンジンバージョン] を入力し、[作成] をクリックします。オープンソースの Flink CDC ジョブのコードをコピーします。
(任意) [検証] をクリックします。
構文、ネットワーク接続、アクセス権限を検証できます。
スクラッチから作成
対象のワークスペースの[アクション] 列で、[コンソール] をクリックします。
左側のナビゲーションウィンドウで、を選択します。
をクリックし、[新規データ取り込みドラフト] を選択し、[ファイル名] と [エンジンバージョン] を入力してから、[作成] をクリックします。Flink CDC ジョブを構成します。
# 必須 source: # ソースコネクタのタイプ type: <ソースコネクタのタイプに置き換えてください> # ソースの構成。詳細については、対応するコネクタのドキュメントをご参照ください。 ... # 必須 sink: # sink コネクタのタイプ type: <sink コネクタのタイプに置き換えてください> # sink の構成。詳細については、対応するコネクタのドキュメントをご参照ください。 ... # オプション transform: # flink_test.customers テーブルの変換ルール - source-table: flink_test.customers # プロジェクション設定。同期する列を指定し、データ変換を実行します。 projection: id, username, UPPER(username) as username1, age, (age + 1) as age1, test_col1, __schema_name__ || '.' || __table_name__ identifier_name # フィルター条件。id が 10 より大きいデータのみを同期します。 filter: id > 10 # 変換ルールの説明 description: append calculated columns based on source table # オプション route: # ルーティングルール。ソーステーブルと sink テーブルのマッピングを指定します。 - source-table: flink_test.customers sink-table: db.customers_o # ルーティングルールの説明 description: sync customers table - source-table: flink_test.customers_suffix sink-table: db.customers_s # ルーティングルールの説明 description: sync customers_suffix table # オプション pipeline: # ジョブ名 name: MySQL to Hologres Pipeline説明Flink CDC ジョブでは、キーと値は
Key: Valueの形式で、スペースで区切る必要があります。次の表に、コードブロックについて説明します。
必須
モジュール
説明
必須
source
データパイプラインの開始点です。Flink CDC はソースから変更データをキャプチャします。
sink
データパイプラインの終点です。Flink CDC はキャプチャしたデータ変更を sink に転送します。
説明サポートされている sink システムについては、「Flink CDC データインジェストコネクタ」をご参照ください。sink の設定項目の詳細については、対応するコネクタのドキュメントをご参照ください。
変数を使用して機密情報を管理できます。詳細については、「変数管理」をご参照ください。
オプション
pipeline
(データパイプライン)
パイプライン名など、データパイプラインジョブ全体に対する基本的な構成を定義します。
transform (データ変換)
データ変換ルールを指定します。変換は、データが Flink パイプラインを流れる際に実行されます。サポートされている機能には、ETL 処理、
WHERE句によるフィルタリング、列のプルーニング、計算列などがあります。transformモジュールを使用して、Flink CDC からの生の変更データを特定の下流システムに合わせて変換します。route
このモジュールが構成されていない場合、ジョブはデータベース全体または指定されたテーブルの同期を実行します。
場合によっては、特定のルールに基づいてキャプチャした変更データを異なる送信先に送信する必要があります。ルーティングメカニズムを使用すると、ソースと sink の間のマッピング関係を柔軟に指定して、データを異なる sink に送信できます。
各モジュールの構文と構成の詳細については、「Flink CDC データインジェストジョブ開発のリファレンス」をご参照ください。
次のコードは、MySQL の app_db データベースから Hologres のデータベースにすべてのテーブルを同期する方法の例です。
source: type: mysql hostname: <hostname> port: 3306 username: ${secret_values.mysqlusername} password: ${secret_values.mysqlpassword} tables: app_db.\.* server-id: 5400-5404 # (オプション) 増分フェーズで作成されたテーブルからデータを同期します。 scan.binlog.newly-added-table.enabled: true # (オプション) テーブルと列のコメントを同期します。 include-comments.enabled: true # (オプション) TaskManager の OutOfMemory 問題を回避するために、有界でないチャンクを優先的にディスパッチします。 scan.incremental.snapshot.unbounded-chunk-first.enabled: true # (オプション) 解析フィルタリングを有効にして読み取りを高速化します。 scan.only.deserialize.captured.tables.changelog.enabled: true sink: type: hologres name: Hologres Sink endpoint: <endpoint> dbname: <database-name> username: ${secret_values.holousername} password: ${secret_values.holopassword} pipeline: name: Sync MySQL Database to Hologres(任意) [検証] をクリックします。
構文、ネットワーク接続、アクセス権限を検証できます。
関連ドキュメント
Flink CDC ジョブを開発したら、それをデプロイする必要があります。デプロイの手順については、「ジョブのデプロイ」をご参照ください。
MySQL データベースから StarRocks にデータを同期する Flink CDC ジョブを迅速に構築するには、「Flink CDC データインジェストジョブのクイックスタート」をご参照ください。