すべてのプロダクト
Search
ドキュメントセンター

Realtime Compute for Apache Flink:Flink CDC データインジェストジョブの開発

最終更新日:Apr 21, 2026

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

スキーマを自動的に検出し、データベース全体の同期をサポート

手動での CREATE TABLE 文と INSERT 文が必要

複数のスキーマ進化ポリシーをサポート

スキーマ進化をサポートしない

元のチェンジログを保持

元のチェンジログ構造を破壊

複数のテーブルからの読み取りと書き込みが可能

単一テーブルからの読み取りと書き込みのみ可能

CTAS 文または CDAS 文と比較して、Flink CDC ジョブには次の利点があります:

  • 新しいデータ書き込みがプロセスをトリガーするのを待つことなく、アップストリームのスキーマ進化を即座に同期します。

  • 元のチェンジログを保持し、UPDATE メッセージは分割されません。

  • TRUNCATE TABLEDROP 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 データインジェストジョブの作成

テンプレートから作成

  1. Realtime Compute for Apache Flink コンソールにログインします。

  2. 対象のワークスペースの[アクション] 列で、[コンソール] をクリックします。

  3. 左側のナビゲーションウィンドウで、[開発] > [データインジェスト] を選択します。

  4. image をクリックし、次に [テンプレートから新規作成] をクリックします。

  5. データ同期テンプレートを選択します。

    現在、MySQL から StarRocks、MySQL から Paimon、MySQL から Hologres へのテンプレートが利用可能です。

    image

  6. ジョブ名、ストレージの場所、エンジンバージョンなどのジョブ情報を入力し、[OK] をクリックします。

  7. Flink CDC ジョブのソースと sink の情報を構成します。

    パラメーター構成の詳細については、対応するコネクタのドキュメントをご参照ください。

CTAS/CDAS から作成

重要
  • ジョブに複数の CTAS または CDAS 文が含まれている場合、Flink は最初のものだけを検出して変換します。

  • Flink SQL と Flink CDC ではビルトイン関数のサポートに違いがあるため、生成された transform ルールがそのままでは機能しない場合があります。必要に応じて確認し、調整する必要があります。

  • ソースが MySQL で、元の CTAS/CDAS ジョブがまだ実行中の場合は、競合を避けるために Flink CDC データインジェストジョブのソースの server-id を調整する必要があります。

  1. Realtime Compute for Apache Flink コンソールにログインします。

  2. 対象のワークスペースの[アクション] 列で、[コンソール] をクリックします。

  3. 左側のナビゲーションウィンドウで、[開発] > [データインジェスト] を選択します。

  4. image をクリックし、次に [CTAS/CDAS ジョブから新規作成] をクリックします。 対象の CTAS または CDAS ジョブを選択し、[OK] をクリックします。

    選択ページには、有効な CTAS および CDAS ジョブのみが表示されます。通常の ETL ジョブや構文エラーのあるドラフトは表示されません。

  5. ジョブ名、ストレージの場所、エンジンバージョンなどを含むジョブ情報を入力し、[OK] をクリックします。

オープンソースから作成

  1. Realtime Compute for Apache Flink コンソールにログインします。

  2. 対象のワークスペースの[アクション] 列で、[コンソール] をクリックします。

  3. 左側のナビゲーションウィンドウで、[開発] > [データインジェスト] を選択します。

  4. image をクリックし、[新規データ取り込みドラフト] を選択し、[ファイル名][エンジンバージョン] を入力し、[作成] をクリックします。

  5. オープンソースの Flink CDC ジョブのコードをコピーします。

  6. (任意) [検証] をクリックします。

    構文、ネットワーク接続、アクセス権限を検証できます。

スクラッチから作成

  1. Realtime Compute for Apache Flink コンソールにログインします。

  2. 対象のワークスペースの[アクション] 列で、[コンソール] をクリックします。

  3. 左側のナビゲーションウィンドウで、[開発] > [データ取り込み]を選択します。

  4. image をクリックし、[新規データ取り込みドラフト] を選択し、[ファイル名][エンジンバージョン] を入力してから、[作成] をクリックします。

  5. 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 はソースから変更データをキャプチャします。

    説明
    • 現在、サポートされているソースは MySQL のみです。特定の設定項目については、「MySQL」をご参照ください。

    • 変数を使用して機密情報を管理できます。詳細については、「変数管理」をご参照ください。

    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
  6. (任意) [検証] をクリックします。

    構文、ネットワーク接続、アクセス権限を検証できます。

関連ドキュメント