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

Hologres:Flink による Hologres binlog データの消費

最終更新日:Jun 22, 2026

このトピックでは、Realtime Compute for Apache Flink を使用して Hologres の binlog データをリアルタイムで消費する方法について説明します。

注意事項

Hologres の binlog データを消費する前に、次の点にご注意ください。

  • binlog データは Hologres V0.9 以降でのみ消費できます。エンジンホワイトリストは Hologres V1.3.21 以降でのみ設定できます。Hologres V1.3.21 より前のバージョンを実行しているインスタンスでホワイトリストを有効にすると、binlog の消費は失敗します。インスタンスのバージョンが必要なバージョンより古い場合は、Hologres のオンラインサポートの利用でサポートを依頼できます。

  • Hologres は、行指向テーブルと列指向テーブルに対して、テーブルレベルで binlog 機能をサポートしています。Hologres V1.1 以降では、行列ハイブリッドストレージテーブルもサポートされています。binlog 機能を有効にすると、理論上、列指向テーブルは行指向テーブルよりもオーバーヘッドが高くなります。したがって、データ更新が頻繁に行われるシナリオでは、行指向テーブルで binlog 機能を有効にすることを推奨します。

  • binlog のサポート、およびこの機能の有効化と設定方法の詳細については、「Hologres binlog のサブスクライブ」をご参照ください。

  • Alibaba Cloud が提供する Realtime Compute for Apache Flink のみが、Hologres binlog データの消費をサポートしています。HoloHub モードでは、Flink による Hologres binlog データの消費は、単純なデータ型のみをサポートします。Flink VVR 6.0.3 以降では、JDBC モードで Hologres binlog データを消費できます。HoloHub モードと比較して、JDBC モードはより多くのデータ型をサポートしています。詳細については、「Blink/Flink と Hologres 間のデータ型マッピング」をご参照ください。このモードには追加の権限が必要です。詳細については、「権限」をご参照ください。

  • 親パーティションテーブルから binlog データを消費することはできません。

  • Hologres V2.0 は、HoloHub モードのサポートを制限しています。V2.1 以降、HoloHub モードは非推奨となり、完全に JDBC モードに置き換えられます。Hologres インスタンスをアップグレードする前に、「HoloHub モードから JDBC モードへの切り替え」を参照して、現在 HoloHub モードを使用している Flink VVR ジョブを確認し、それに応じて Flink VVR ジョブをアップグレードしてから、Hologres インスタンスをアップグレードしてください。

権限

  • HoloHub モードとは異なり、JDBC モードは、Realtime Compute for Apache Flink で Hologres の binlog データを消費する際に、カスタムの Hologres アカウントをサポートします。

  • HoloHub モードで Hologres の binlog データを消費するには、Flink ジョブにテーブルへの読み取りおよび書き込み権限が必要です。

  • JDBC モードで Hologres の binlog データを消費するには、以下の前提条件を満たす必要があります。詳細については、「JDBC を使用した binlog データの消費」をご参照ください。

    1. hg_binlog 拡張が作成されていること。この拡張は、Hologres V2.0 以降ではデフォルトで作成されます。

    2. ユーザーがインスタンスのスーパーユーザーであるか、対象テーブルの owner 権限とインスタンスのレプリケーションロール権限の両方を持っていること。

Flink による binlog データの消費

VVR 2.4 以降の Realtime Compute for Apache Flink は、Hologres Connector を使い、binlog データのリアルタイム消費をサポートします。以下のセクションでは、この機能の使用方法について説明します。

非 CDC モードでのソーステーブル DDL

このモードでは、ソースが消費した binlog データは、通常の Flink データとして下流ノードに渡されます。これは、すべてのデータが Insert 型のデータとして扱われることを意味し、ビジネス要件に基づいて特定の hg_binlog_event_type 型のデータをどのように処理するかを選択できます。Hologres テーブルで binlog を有効にした後、Flink でソーステーブル (非 CDC モード) に以下の DDL を使用して、binlog をリアルタイムで消費できます。

create table test_message_src_binlog_table(
  hg_binlog_lsn BIGINT,
  hg_binlog_event_type BIGINT,
  hg_binlog_timestamp_us BIGINT,
  id INTEGER,
  title VARCHAR,
  body VARCHAR
) with (
  'connector'='hologres',
  'dbname'='<yourDbname>',
  'tablename'='<yourTablename>',
  'username'='<yourAccessID>',
  'password'='<yourAccessSecret>',
  'endpoint'='<yourEndpoint>',
  'binlog' = 'true',
  'binlogMaxRetryTimes' = '10',
  'binlogRetryIntervalMs' = '500',
  'binlogBatchReadSize' = '100'
);
  • 3 つの binlogxxx パラメーターは binlog システムフィールドです。これらの名前と型は固定されており、変更することはできません。

  • 他のフィールドはユーザー定義フィールドに対応し、すべて小文字である必要があります。

CDC モードでのソーステーブル DDL

このモードでは、ソースは binlog データを消費し、hg_binlog_event_type に基づいて各行に正しい Flink RowKind 型 (INSERT、DELETE、UPDATE_BEFORE、または UPDATE_AFTER) を自動的に設定します。これにより、MySQL や PostgreSQL の CDC 機能と同様に、テーブルデータのミラー同期が可能になります。

説明

CDC モードの Hologres binlog ソーステーブルは、現在ウォーターマーク定義をサポートしていません。ウィンドウ集約を実行する必要がある場合は、非ウィンドウアプローチを使用できます。詳細については、「CDC ソーステーブルがウィンドウ関数をサポートしていない場合に、分レベルの集計を実装する方法」をご参照ください。

Hologres テーブルで binlog 機能を有効にした後、Flink で以下の DDL を使用してソーステーブルを作成し、CDC モードで binlog データをリアルタイムに消費できます。

create table test_message_src_binlog_table(
  id INTEGER,
  title VARCHAR,
  body VARCHAR
) with (
  'connector'='hologres',
  'dbname'='<yourDbname>',
  'tablename'='<yourTablename>',
  'username'='<yourAccessID>',
  'password'='<yourAccessSecret>',
  'endpoint'='<yourEndpoint>',
  'binlog' = 'true',
  'cdcMode' = 'true',
  'binlogMaxRetryTimes' = '10',
  'binlogRetryIntervalMs' = '500',
  'binlogBatchReadSize' = '100'
);

完全データと増分データのソーステーブル

VVR エンジン 1.13-vvr-4.0.13 および Hologres V0.10 以降、Hologres binlog CDC ソーステーブルは、完全データと増分データの統合消費をサポートしています。この方法では、まずデータベースから履歴の完全データを読み取り、その後スムーズに binlog からの増分データの読み取りに移行します。詳細については、「Hologres リアルタイムデータウェアハウス」をご参照ください。

JDBC モードの binlog ソーステーブル

Flink VVR 6.0.3 以降では、JDBC モードで Hologres binlog データを消費できます。HoloHub モードと比較して、JDBC モードはより多くのデータ型とカスタムアカウントをサポートしています。JDBC モードの使用方法の詳細については、「Hologres リアルタイムデータウェアハウス」をご参照ください。

HoloHub モードから JDBC モードへの切り替え

Hologres は V2.0 で HoloHub モードの段階的廃止を開始しました。Hologres インスタンスをアップグレードする必要がある場合は、以下で説明するように、ジョブを HoloHub モードから JDBC モードに切り替える必要があります。

V2.1 へのアップグレード

Hologres インスタンスを V2.1 にアップグレードする前に、以下のいずれかのソリューションを選択して Flink ジョブと Hologres インスタンスをチェックし、ジョブが期待どおりに実行されることを確認してください。

  • (ソリューション 1) (推奨) Flink VVR バージョンを 8.0.7 以降にアップグレードします。Flink は自動的に HoloHub モードから JDBC モードに切り替わります。

  • (ソリューション 2) Flink VVR を 6.0.7 から 8.0.5 の間のバージョンにアップグレードします。ソーステーブルに 'sdkMode'='jdbc' パラメーターを追加し、ジョブを再起動します。また、ユーザーに 以下のいずれかの権限セット を付与する必要があります。ジョブが正常に実行されることを確認した後、Hologres インスタンスをアップグレードできます。

    • (オプション 1) インスタンスに対するスーパーユーザー権限。

    • (オプション 2) 対象テーブルの owner 権限、CREATE DATABASE 権限、およびインスタンスのレプリケーションロール権限。

  • (ソリューション 3) (非推奨) Flink VVR バージョンを 8.0.6 にアップグレードします。Flink は自動的に HoloHub モードから JDBC モードに切り替わります。ただし、VVR 8.0.6 には既知の不具合があり、ディメンションテーブルにフィールドが多すぎるとジョブのデプロイがタイムアウトする可能性があります。詳細については、「Hologres Connector リリースノート」をご参照ください。

  • (オプション) 多くの Flink VVR ジョブがある場合は、以下の手順で、アップグレードが必要なジョブとテーブルを特定します。

V2.0 へのアップグレード

  • (ソリューション 1) (推奨) Flink VVR バージョンを 8.0.6 以降にアップグレードします。Flink は自動的に HoloHub モードから JDBC モードに切り替わります。ただし、VVR 8.0.6 には既知の不具合があり、ディメンションテーブルにフィールドが多すぎるとジョブのデプロイがタイムアウトする可能性があります。詳細については、「Hologres Connector リリースノート」をご参照ください。VVR 8.0.7 へのアップグレードを推奨します。

  • (ソリューション 2) Flink VVR バージョンを 8.0.4 または 8.0.5 にアップグレードし、Flink ジョブを再起動します。また、ユーザーに 以下のいずれかの権限セット を付与する必要があります。ジョブが正常に実行されることを確認した後、Hologres インスタンスをアップグレードできます。

    • (オプション 1) インスタンスに対するスーパーユーザー権限。

    • (オプション 2) 対象テーブルの owner 権限、CREATE DATABASE 権限、およびインスタンスのレプリケーションロール権限。

  • (ソリューション 3) Flink VVR バージョンを 6.0.7 から 8.0.3 の間のバージョンにアップグレードします。Flink は引き続き HoloHub モードで binlog データを消費します。

Hologres の binlog データを消費する Flink VVR ジョブが多数ある場合は、以下の方法でアップグレードが必要なジョブとテーブルを特定できます。

説明

このツールは、以下の種類のジョブの情報のみを取得できます。

  • DDLでテーブルを定義する SQL ジョブ。

  • ヒントでパラメーターを指定する Catalog ジョブ。

このツールは、JAR ジョブやヒントパラメーターのない Catalog テーブルの情報を取得できません。

  1. オープンソースツール find-incompatible-flink-jobs-1.0-SNAPSHOT-jar-with-dependencies.jar をダウンロードします。

  2. ローカルのコマンドラインで、オープンソースツールのディレクトリに移動し、次のコマンドを実行して、アップグレードが必要なすべてのジョブとテーブルを表示します。

    説明

    次のコマンドを実行するには、JDK 8 以降の Java 環境がインストールされている必要があります。

    java -cp find-incompatible-flink-jobs-1.0-SNAPSHOT-jar-with-dependencies.jar com.alibaba.hologres.FindIncompatibleFlinkJobs <region> <url> <AccessKeyID> <AccessKeySecret> <binlog/rpc>
    # 例
    java -cp find-incompatible-flink-jobs-1.0-SNAPSHOT-jar-with-dependencies.jar com.alibaba.hologres.FindIncompatibleFlinkJobs Beijing https://vvp.console.aliyun.com/web/xxxxxx/en/#/workspaces/xxxx/namespaces/xxxx/operations/stream/xxxx my-access-key-id my-access-key-secret binlog

    次の表にパラメーターを説明します。

    パラメーター

    説明

    region

    Realtime Compute for Apache Flink ワークスペースがあるリージョン。有効な値のリストについては、「リージョン値」の表をご参照ください。

    url

    対象の Realtime Compute for Apache Flink ワークスペース内の任意のジョブの URL。

    AccessKey ID

    Realtime Compute for Apache Flink ワークスペースへのアクセス権を持つアカウントの AccessKey ID。

    AccessKey Secret

    Realtime Compute for Apache Flink ワークスペースへのアクセス権を持つアカウントの AccessKey Secret。

    binlog/rpc

    チェックするジョブコンテンツのタイプ。有効な値:

    • binlog:ワークスペース内のすべてのジョブの、すべての Hologres binlog ソーステーブルをチェックします。

    • rpc:ワークスペース内のすべてのジョブで、rpc モードを使用するすべてのディメンションテーブルまたは結果テーブルをチェックします。

    リージョン値 (クリックして展開)

    リージョン

    中国 (北京)

    Beijing

    中国 (上海)

    Shanghai

    中国 (杭州)

    Hangzhou

    中国 (深圳)

    Shenzhen

    中国 (張家口)

    Zhangjiakou

    中国 (香港)

    Hong Kong

    シンガポール

    Singapore

    ドイツ (フランクフルト)

    Frankfurt

    インドネシア (ジャカルタ)

    Jakarta

    マレーシア (クアラルンプール)

    Kuala Lumpur

    米国 (シリコンバレー)

    us-west-1

    中国東部 2 (金融)

    China East 2 Finance

  3. 次のコードは、結果のサンプルを示しています。

    dwd_xxx nx not a running job, skip
    dwd_st xxx not a running job, skip
    dwd_xxx a not a running job, skip
    dia xxx not a hologres job, skip
    dwd_tr xxx ail not sql job, skip
    --- 以下は、バージョンが8.0.5より前で、かつsdkmode = jdbcが設定されていないHologres binlogソーステーブルです ---
    deploymentName                         version                              tableName
    ads_xxx                   xxx vvr-6.0.7-flink-1.15 adsdb.ads_xxx              xxx         xxx catalog
           xxx      vvr-8.0.1-flink-1.17 odsdb.ods_xxx      nts
    xxx           vvr-8.0.1-flink-1.17 dwsdb.dws_xxx             tag
    xxx       s vvr-8.0.1-flink-1.17 odsdb.ods_xxx        ers