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

Hologres:Blink および Flink のよくある質問とトラブルシューティング

最終更新日:Feb 04, 2026

このトピックでは、Hologres を使用した Blink および Flink の利用時に発生する可能性のある一般的な問題について説明します。

用語

  • Hologres のパフォーマンス

    • 書き込みパフォーマンス

      • 列指向テーブル:InsertOrIgnore > InsertOrReplace > InsertOrUpdate

      • 行指向テーブル:InsertOrReplace = InsertOrUpdate > InsertOrIgnore

      パラメーター

      説明

      InsertOrIgnore

      結果テーブルにプライマリキーが設定されており、リアルタイム書き込み中に重複するプライマリキーが検出された場合、後続のレコードは破棄されます。

      InsertOrReplace

      結果テーブルにプライマリキーが設定されており、リアルタイム書き込み中に重複するプライマリキーが検出された場合、そのプライマリキーに基づいてレコードが更新されます。新しい行にすべてのカラムが含まれていない場合、不足しているカラムは null に設定されます。

      InsertOrUpdate

      結果テーブルにプライマリキーが設定されており、リアルタイム書き込み中に重複するプライマリキーが検出された場合、そのプライマリキーに基づいてレコードが更新されます。新しい行にすべてのカラムが含まれていない場合、不足しているカラムの既存の値は保持されます。

    • ポイントクエリのパフォーマンス

      行指向ストレージは、行・列ハイブリッドストレージよりも優れたパフォーマンスを発揮し、行・列ハイブリッドストレージは列指向ストレージよりも優れたパフォーマンスを発揮します。

  • Blink、Flink (VVR)、およびオープンソース Flink のサポート状況

    フォームファクター

    データストレージタイプ

    説明

    ソーステーブル

    シンクテーブル

    ディメンションテーブル

    バイナリログ

    Hologres Catalog

    Fully managed Flink

    行指向および列指向ストレージをサポートしています。

    行指向および列指向ストレージをサポートしています。

    行指向ストレージを使用してください。

    サポートされています。

    サポートされています。

    なし

    Blink Dedicated

    行指向および列指向ストレージをサポートしています。

    行指向および列指向ストレージをサポートしています。

    行指向ストレージを使用してください。

    Hologres V0.8 は行指向ストレージのみをサポートしています。Hologres V0.9 以降は行指向および列指向ストレージをサポートしています。行指向ストレージを使用してください。

    サポートされていません。

    このプロダクトはフェーズアウト中です。Alibaba Cloud の Fully managed Flink を使用してください。

    Open source Flink 1.10

    行指向および列指向ストレージをサポートしています。

    行指向および列指向ストレージをサポートしています。

    なし

    サポートされていません。

    サポートされていません。

    なし

    Open source Flink 1.11 以降

    行指向および列指向ストレージをサポートしています。

    行指向および列指向ストレージをサポートしています。

    行指向ストレージを使用してください。

    サポートされていません。

    サポートされていません。

    オープンソース Flink 1.11 以降では、Hologres のコードがオープンソース化されています。詳細については、「GitHub」をご参照ください。

  • 次の例は、SQL を使用して Flink テーブルを Hologres テーブルにマッピングする方法を示しています。

    create table holo_source(
    'hg_binlog_lsn' BIGINT HEADER,
    'hg_binlog_event_type' BIGINT HEADER,
    'hg_binlog_timestamp_us' BIGINT HEADER,
    A int,
    B int,
    C timestamp )
    with (
    type = 'hologres',
    'endpoint' = 'xxx.hologres.aliyuncs.com:80',   --Hologres インスタンスのエンドポイント。
    'userName' = '',                               --ご利用の Alibaba Cloud アカウントの AccessKey ID。
    'password' = '',                               --ご利用の Alibaba Cloud アカウントの AccessKey Secret。
    'dbName' = 'binlog',                           --Hologres インスタンス内のデータベース名。
    'tableName' ='test'                            --Hologres インスタンス内のテーブル名。
    'binlog' = 'true',
    );

    Blink、VVR、および Flink SQL はすべて、Flink テーブルを宣言した後、パラメーターを使用して Hologres 内の特定の物理テーブルにマッピングします。そのため、外部テーブルへのマッピングはサポートされていません。

リアルタイム書き込みの遅延のトラブルシューティング

  1. 構成の確認

    次の構成情報を確認します。

    • 宛先テーブルのストレージ形式(行指向、列指向、行・列ハイブリッドストアテーブルを含む)。

    • 挿入モード(InsertOrIgnore、InsertOrUpdate、InsertOrReplace を含む)。

    • 宛先テーブルの Table Group および Shard Count。

  2. リアルタイム書き込みレイテンシメトリックの確認

    平均書き込みレイテンシが高くなる場合(数百ミリ秒または数秒)、バックエンドで書き込みボトルネックに達している可能性があります。次の問題が存在する可能性があります。

    • 列指向テーブルに対して InsertOrUpdate を使用しており、部分更新が実行されています。トラフィックが高くなると、インスタンスの CPU 負荷および書き込みレイテンシが高くなる可能性があります。

      ソリューション:テーブルタイプを変更します。行指向テーブルを使用してください。ご利用のインスタンスが V1.1 以降の場合、行・列ハイブリッドストアテーブルを選択できます。

    • Cloud Monitor でインスタンスの CPU 負荷を確認します。CPU 使用率が 100 %近くに達しているが、列指向テーブルでの部分更新が行われていない場合、原因は通常、高 QPS クエリまたは高い書き込み量です。

      解決策:Hologres インスタンスをスケールアウトします。

    • Insert into select from コマンドが継続的に実行され、テーブルへの BulkLoad 書き込みがトリガーされていないか確認します。BulkLoad 書き込みは現在、リアルタイム書き込みをブロックします。

      ソリューション:BulkLoad 書き込みをリアルタイム書き込みに変換するか、オフピーク時間帯に実行します。

  3. データスキューの確認

    次の SQL コマンドを使用してデータスキューを確認します。

    SELECT hg_shard_id, count(1) FROM t1 GROUP BY hg_shard_id ORDER BY hg_shard_id;

    ソリューション:分散キーを変更して、データをより均等に分散させます。

  4. バックエンドの負荷確認

    前述の手順で問題が見つからないにもかかわらず、書き込みパフォーマンスが突然低下した場合、バックエンドクラスターが高負荷状態になり、ボトルネックが発生している可能性があります。状況を確認するには、テクニカルサポートまでお問い合わせください。詳細については、「オンラインサポートの追加方法」をご参照ください。

  5. Blink/Flink 側のバックプレッシャーの確認

    前述の手順で Hologres 側に明らかな問題が見られない場合、通常はクライアント側が遅く、Blink/Flink 側が遅くなっています。シンクノードでバックプレッシャーが発生していないか確認します。タスクにノードが 1 つしかない場合、バックプレッシャーの有無を確認できません。この場合は、シンクノードを分離して再度観察します。詳細については、Flink テクニカルサポートまでお問い合わせください。

データ書き込み問題のトラブルシューティング

この問題は通常、順不同のデータによって引き起こされます。たとえば、同じプライマリキーを持つデータが異なる Flink タスクに分散されており、書き込み順序を保証できない場合などです。Flink SQL のロジックを確認し、Hologres に書き込む前にデータが Hologres テーブルのプライマリキーでシャッフルされていることを確認してください。

ディメンションテーブルクエリ問題のトラブルシューティング

  • ディメンションテーブル結合とデュアルストリーム結合

    Hologres から読み取る際は、まずディメンションテーブル結合を正しく使用しているかどうかを確認し、デュアルストリーム結合と混同していないことを確認します。以下は、Hologres をディメンションテーブルとして使用する例です。キーワード proctime AS PROCTIME() および hologres_dim FOR SYSTEM_TIME AS が欠落している場合、デュアルストリーム結合になります。

    CREATE TEMPORARY TABLE datagen_source (
       a INT,
       b BIGINT,
       c STRING,
       proctime AS PROCTIME()
    ) with (
       'connector' = 'datagen'
    );
    
    CREATE TEMPORARY TABLE hologres_dim (
       a INT, 
       b VARCHAR, 
       c VARCHAR
    ) with (
       'connector' = 'hologres',
       ...
    );
    
    CREATE TEMPORARY TABLE blackhole_sink (
       a INT,
       b STRING
    ) with (
       'connector' = 'blackhole'
    );
    
    insert into blackhole_sink select T.a,H.b
    FROM datagen_source AS T JOIN hologres_dim FOR SYSTEM_TIME AS OF T.proctime AS H ON T.a = H.a;
  • ディメンションテーブルクエリ

    1. ディメンションテーブルのストレージ形式の確認

      ディメンションテーブルが行指向、列指向、または行・列ハイブリッドストアテーブルであるかどうかを確認します。

    2. ディメンションテーブルクエリの高レイテンシ

      ディメンションテーブルに関する最も一般的な問題は、Flink/Blink 側の結合ノードでバックプレッシャーが発生し、全体のタスクのスループットが低下することです。

      1. Flink ディメンションテーブル結合モードの確認

        Hologres Flink コネクタのディメンションテーブル結合機能は、同期モードと非同期モードをサポートしています。非同期モードは同期モードよりも優れたパフォーマンスを発揮します。Flink SQL を確認することで、これらを区別できます。以下は、非同期ディメンションテーブルクエリを有効にする SQL 文の例です。

        CREATE TABLE hologres_dim(
         id INT,
         len INT,
         content VARCHAR
        ) with (
          'connector'='hologres',
          'dbname'='<yourDbname>',  --Hologres データベースの名前。
          'tablename'='<yourTablename>',  --データを受信する Hologres のテーブル名。
          'username'='<yourUsername>',  --ご利用の Alibaba Cloud アカウントの AccessKey ID。
          'password'='<yourPassword>',  --ご利用の Alibaba Cloud アカウントの AccessKey Secret。
          'endpoint'='<yourEndpoint>'  --ご利用の Hologres インスタンスの VPC エンドポイント。
          'async' = 'true'--非同期モード
        );
      2. バックエンドクエリレイテンシの確認

        リアルタイム書き込みレイテンシメトリックを確認します。

        • ディメンションテーブルとして列指向テーブルが使用されていないか確認します。列指向形式のディメンションテーブルは、高 QPS シナリオでオーバーヘッドが大きくなります。

        • 行指向テーブルでありながらレイテンシが高い場合、通常はインスタンス全体の負荷が高くなっています。インスタンスをスペックアップする必要があります。

    3. 結合キーが Hologres テーブルのプライマリキーであるかどうかの確認

      Ververica Runtime (VVR) 4.x (Flink 1.13) 以降では、Hologres コネクタは Holo Client に基づいて Hologres テーブルに対するプライマリキー以外のクエリをサポートしています。これは通常、パフォーマンスが劣り、インスタンス負荷が高くなります。特にテーブルスキーマが最適化されていない場合に顕著です。このような場合、ユーザーにテーブルスキーマの最適化を推奨します。最も一般的な最適化は、結合キーを分散キーに設定して、シャードプルーニングを有効にすることです。

    4. Blink 側のバックプレッシャーの確認

      前述の手順で Hologres 側に明らかな問題が見られない場合、通常はクライアント側が遅く、Blink 側が遅くなっています。シンクノードでバックプレッシャーが発生していないか確認します。タスクにノードが 1 つしかない場合、バックプレッシャーの有無を確認できません。この場合は、シンクノードを分離して再度観察します。また、結合ノードでバックプレッシャーが発生していないかも確認できます。詳細については、Flink テクニカルサポートまでお問い合わせください。

接続に関する注意事項

Hologres コネクタは、デフォルトで Java Database Connectivity (JDBC) 関連モードを使用します。

  • JDBC_FIXED モードが現在サポートされています。このモードは接続を占有せず、バイナリログの消費時に最大 Walsender 数の制限を受けません。詳細については、「Hologres」をご参照ください。

  • Flink エンジン VVR-8.0.5-Flink-1.17 以降では、'connectionPoolName' = 'default' により、デフォルトで接続の再利用が有効になっています。ほとんどのタスクでは影響はありませんが、単一のタスクに多数のテーブルが含まれている場合、アップグレード後にパフォーマンスが低下する可能性があります。このような場合は、ホットスポットテーブルに対して個別の connectionPoolName パラメーターを設定して、パフォーマンスを最適化できます。

  • JDBC モードは一定数の接続を占有します。テーブルタイプごとのデフォルトの接続使用量は次のとおりです。

    テーブルタイプ

    デフォルト接続数 (Flink タスク同時実行性あたり)

    バイナリログソーステーブル

    0

    バッチソーステーブル

    1

    ディメンションテーブル

    3 (connectionSize パラメーターで調整可能)

    結果テーブル

    3 (connectionSize パラメーターで調整可能)

    • 接続計算方法

      • デフォルトケース

        デフォルトでは、タスクが使用する最大接続数は次の式で計算できます。

        最大接続数 = (バッチソーステーブル数 × 1 + ディメンションテーブル数 × connectionSize + 結果テーブル数 × connectionSize) × タスク同時実行性

        たとえば、タスクに 1 つのフルおよび増分ソーステーブル、2 つのディメンションテーブル、3 つの結果テーブルがあります。すべてがデフォルトの connectionSize パラメーター値を使用しており、タスク同時実行性が 5 に設定されている場合、最終的な使用接続数は (1 × 1 + 2 × 3 + 3 × 3) × 5 = 80 になります。

      • 接続の再利用

        Realtime Compute for Apache Flink バージョン 1.13-vvr-4.1.12 以降では、接続の再利用がサポートされています。タスクの同一同時実行性内で、同じ connectionPoolName を持つディメンションテーブルおよび結果テーブルは、同じ接続プールを使用します。デフォルトの例では、2 つのディメンションテーブルおよび 3 つの結果テーブルが同じ connectionPoolName で設定されており、connectionSize が適切に 5 に増加されている場合、最終的な使用接続数は (1 × 1 + 5) × 5 = 30 になります。

        説明

        接続再利用モードは、ほとんどのシナリオに適しています。ただし、ディメンションテーブルが多く、非同期モードやキャッシュが有効になっていないような一部のシナリオでは、同期ポイントクエリが非常に頻繁に実行されます。このような場合、マルチテーブル接続の再利用によりクエリが遅くなる可能性があります。結果テーブルに対してのみ接続の再利用を設定できます。

      • 接続を使用するその他のシナリオ

        • タスク起動時、テーブルメタデータの検証などのタスクのために接続が確立されます。これにより、一時的に 3 ~ 6 本の接続が使用されることがありますが、タスクが正常に実行されると解放されます。

        • Fully managed Flink は、Hologres Catalog、CREATE TABLE AS SELECT (CTAS)、CREATE DATABASE AS (CDAS) などの機能をサポートしています。これらの機能を使用する場合も接続を占有します。デフォルトでは、カタログを使用するタスクは、テーブル作成などの DDL 操作のために追加で 3 本の接続を占有します。

    • 接続使用状況の診断

      タスクに多数のテーブルが含まれている場合や同時実行性が高い場合、多くの接続を占有し、Hologres インスタンスの合計接続数を使い切ることがあります。現在の接続使用状況を把握および診断するには、次の方法を使用します。

      • HoloWeb で次のコマンドを使用して、pg_stat_activity テーブル内の現在のアクティブクエリを表示します。詳細については、「pg_stat_activity ビューのクエリ」をご参照ください。application_name フィールドが ververica-connector-hologres であるクエリは、Realtime Compute for Apache Flink からの読み取りおよび書き込み接続を表します。

        SELECT application_name, COUNT (1) AS COUNT
        FROM
          pg_stat_activity
        WHERE
          backend_type = 'client backend'
          AND application_name != 'hologres'
        GROUP BY application_name;
      • 場合によっては、タスク同時実行性が高すぎる設定になっていることがあります。Hologres Instancesリストのインスタンスの監視情報ページでは、起動時に接続数が多く、その後しばらくすると減少することがあります。これは、多くの接続がアイドル状態になり、閉じられたためです。これは、タスクが実際にそれほど高い同時実行性や接続数を必要としていないことを示しています。タスク接続を適切に計画し、同時実行性または connectionSize パラメーター値を減らすか、接続再利用モードを使用してください。

      • Hologres ノードの同時実行性を適切に調整します。デフォルトでは、Flink タスクのすべてのオペレーターは同じ同時実行性を持ちます。一部のシナリオでは、複雑な計算ロジックを持つオペレーターに高い同時実行性を設定する必要があります。ただし、この同時実行性は Hologres 結果テーブルにとっては冗長であり、多くの接続を占有する可能性があります。このような場合は、タスクリソース構成を参照し、エキスパートモードを選択して、書き込みオペレーターに適切で小さい同時実行性を設定し、合計接続使用量を削減します。

一般的なエラー

エラー:ERPC TIMEOUT または ERPC CONNECTION CLOSED

  • 症状:com.alibaba.blink.store.core.rpc.RpcException: request xx UpsertRecordBatchRequest failed on final try 4, maxAttempts=4, errorCode=3, msg=ERPC_ERROR_TIMEOUT というエラーが発生します。

  • 考えられる原因:書き込み操作が過剰な負荷により失敗したか、クラスターがビジー状態です。Hologres インスタンスの CPU 負荷が上限に達していないか確認してください。CONNECTION CLOSED は、過剰な負荷によりバックエンドノードがクラッシュし、メモリ不足 (OOM) エラーやコアダンプが発生したことが原因で発生する可能性があります。

  • ソリューション:書き込み操作を再試行します。問題が継続する場合は、原因を調査するために Hologres テクニカルサポートまでお問い合わせください。

エラー:BackPresure Exceed Reject Limit

  • 考えられる原因:Hologres バックエンドが過剰な書き込み負荷にさらされ、Memtable がディスクにフラッシュされないため、書き込みが失敗します。

  • ソリューション:失敗が偶発的なものであれば、無視しても問題ありません。または、結果テーブルにパラメーター rpcRetries = '100' を追加して、書き込みリトライ回数を増やします。このエラーが継続する場合は、バックエンドインスタンスの状態を確認するために Hologres テクニカルサポートまでお問い合わせください。

エラー: リクエストされたテーブル名 xxx が、サーバー上のテーブル xxx のバージョンと一致しません/org.postgresql.util.PSQLException: バックエンドへの送信中に I/O エラーが発生しました。原因: java.net.SocketTimeoutException: 読み取りがタイムアウトしました

  • 考えられる原因:ALTER TABLE 操作を実行したため、Blink 書き込みに含まれるテーブルのスキーマバージョン番号がサーバー側のバージョン番号よりも低くなり、クライアントのリトライ回数が上限に達しました。

  • ソリューション:エラーが偶発的なものであれば、無視しても問題ありません。このエラーが継続する場合は、Hologres テクニカルサポートまでお問い合わせください。

エラー:Failed to query table meta for table

  • 考えられる原因:Hologres 外部テーブルから読み取りまたは書き込みを行っています。Hologres コネクタは、外部テーブルからの読み取りまたは書き込みをサポートしていません。そうでない場合、Hologres インスタンスのメタデータに問題がある可能性があります。

  • ソリューション:Hologres テクニカルサポートまでお問い合わせください。

エラー:Cloud authentication failed for access id

  • 考えられる原因:設定された AccessKey 情報が正しくないか、アカウントが Hologres インスタンスに追加されていません。

  • ソリューション:

    • 現在のアカウントの AccessKey ID および AccessKey Secret が正しく入力されているか確認します。AccessKey Secret は誤って入力されたり、スペースが含まれていたりすることがよくあります。

    • 原因が特定できない場合は、現在の AccessKey を使用して HoloWeb に接続します(アカウントとパスワードでログイン)。接続テスト時のエラーメッセージを確認します。エラーが同じであれば、AccessKey に問題があります。エラーが FATAL: role“ALIYUN$xxxx“Does not exist の場合、アカウントにインスタンスへの権限がありません。管理者がアカウントに権限を付与する必要があります。

Hologres ディメンションテーブルからデータを結合できない

  • 考えられる原因:Hologres ディメンションテーブルがパーティションテーブルです。パーティションテーブルはディメンションテーブルとしてサポートされていません。

  • ソリューション:パーティションテーブルを標準テーブルに変換します。

エラー: プライマリキーによるレコードの変更は、このテーブルではサポートされていません

  • 考えられる原因:リアルタイム書き込みに対して更新モードが選択されていますが、Hologres 結果テーブルにプライマリキーが設定されていません。

  • ソリューション:プライマリキーを設定します。

エラー:shard columns count is no match

  • 考えられる原因:Hologres への書き込み時に、完全な分散キーカラム(デフォルトではプライマリキー)が書き込まれていません。

  • ソリューション:完全な分散キーカラムを書き込みます。

エラー:Full row is required, but the column xxx is missing

  • 考えられる原因:これは古いバージョンの Hologres からのエラーメッセージです。通常、null にできないカラムにデータが書き込まれていないことを意味します。

  • ソリューション:null にできないカラムに値を割り当てます。

VVP ユーザーによる Hologres へのアクセス時の JDBC 接続の急増

  • 考えられる原因:VVR Hologres コネクタは、バイナリログを除き、JDBC モードを使用して Hologres から読み取りおよび書き込みを行います。最大で 読み取り/書き込み対象の Hologres テーブル数 × 同時実行性 × connectionSize (VVR テーブルパラメーター、デフォルトは 3) 本の接続を占有します。

  • ソリューション:タスク接続を適切に計画します。同時実行性または connectionSize を減らします。同時実行性または connectionSize を下げることができない場合は、テーブルにパラメーター useRpcMode = 'true' を設定して、RPC モードに戻します。

Blink/VVR ユーザーが Hologres からの読み取りまたは書き込み時に接続エラーを取得する

  • 考えられる原因:Blink/VVR クラスターはデフォルトで、パブリックネットワークへのアクセスが遅いか、アクセスできません。

  • ソリューション:クラスターが Hologres インスタンスと同じリージョンにあることを確認し、VPC エンドポイントを使用します。

エラー:Hologres rpc mode dimension table does not support one to many join

  • 考えられる原因:Blink および VVR の RPC モードディメンションテーブルは行指向テーブルである必要があり、結合フィールドはプライマリキーである必要があります。このエラーは、通常これらの 2 つの条件を満たしていないために発生します。

  • ソリューション:JDBC モードを使用し、ディメンションテーブルには行指向または行・列ハイブリッドストアテーブルを使用します。

エラー:DatahubClientException

  • 症状:Caused by: com.aliyun.datahub.client.exception.DatahubClientException: [httpStatus:503, requestId:null, errorCode:null, errorMessage:{"ErrorCode":"ServiceUnavailable","ErrorMessage":"Queue Full"}] というエラーが発生します。

  • 考えられる原因:何らかの理由で多数のバイナリログ消費タスクが同時に再起動し、スレッドプールが枯渇しています。

  • ソリューション:バイナリログ消費タスクをバッチで実行します。

エラー:datahub からのデータ読み取り時にエラーが発生する

  • 症状:Error occurs when reading data from datahub, msg: [httpStatus:500, requestId:xxx, errorCode:InternalServerError, errorMessage:Get binlog timeout.] というエラーが発生します。

  • 考えられる原因:各バイナリログデータが大きすぎます。バッチ処理後、各 RPC リクエストのサイズが最大制限を超えています。

  • ソリューション:各行のデータに多くのフィールドと長い文字列が含まれている場合、バッチ処理の構成を減らします。

エラー:Caused by: java.lang.IllegalArgumentException: Column: created_time type does not match: flink row type: TIMESTAMP(6) WITH LOCAL TIME ZONE, hologres type: timestamp

  • 考えられる原因:TIMESTAMP(6) タイプが Flink のフィールドに使用されています。このタイプを Hologres にマッピングすることは現在サポートされていません。

  • ソリューション:フィールドタイプを TIMESTAMP に変更します。

エラー:Caused by: org.postgresql.util.PSQLException: FATAL: Rejected by ip white list. db = xxx, usr=xxx, ip=xx.xx.xx.xx

  • 考えられる原因:Hologres に IP ホワイトリストが設定されていますが、Flink が Hologres にアクセスする IP アドレスがホワイトリストに含まれていないため、アクセスがブロックされています。

  • ソリューション:Flink の IP アドレスを Hologres の IP ホワイトリストに追加します。詳細については、「IP ホワイトリスト」をご参照ください。

エラー:Caused by: java.lang.RuntimeException: shaded.hologres.com.aliyun.datahub.client.exception.DatahubClientException: [httpStatus:400, requestId:xx, errorCode:TableVersionExpired, errorMessage:The specified table has been modified, please refresh cursor and try again

  • 考えられる原因:ソーステーブルに対して DDL 操作を実行したため、テーブルバージョンが変更され、消費が失敗しました。

  • ソリューション:Flink をバージョン 4.0.16 以降にアップグレードします。このバージョンでは、このような状況でリトライが実行されます。

例外:バイナリログタスクの開始時に「Shard ID does not exist」例外がスローされる

  • 考えられる原因:消費対象テーブルのシャード数が変更されています。テーブル名の変更などの操作が原因である可能性があります。タスクはチェックポイントから復旧する際に、古いテーブルのシャード情報を使用しています。

  • ソリューション:テーブルの再作成などの操作後、バイナリログ消費チェックポイント情報は無効になります。ステートなしでタスクを再起動します。

エラー:ERROR,22021,"invalid byte sequence for encoding ""UTF8"": 0x00"

  • 考えられる原因:ディメンションテーブルのポイントクエリ中に、プライマリキー(文字列タイプ)に UTF-8 でエンコードされていない文字が含まれており、SQL 実行が失敗しています。

  • ソリューション:上流でダーティデータを処理します。

エラー:hologres.org.postgresql.util.PSQLException: ERROR: syntax error

  • 考えられる原因:JDBC モードでバイナリログテーブルを消費する際、スロットを指定する必要があります。作成されたスロット名にサポートされていない文字(小文字、数字、アンダースコアのみサポート)が含まれている場合、このエラーが発生する可能性があります。

  • ソリューション:スロットを再作成するか、VVR-6.0.7 の自動スロット作成機能を使用します。

エラー:create table hologres.hg_replication_progress failed

  • 考えられる原因:JDBC を介してバイナリログを消費する際、hg_replication_progress テーブルが必要になる場合があります。現在のデータベースにこのテーブルが存在しない場合、作成する必要があります。ただし、インスタンスで作成可能なシャード数が上限に達しているため、作成が失敗しています。

  • ソリューション:未使用のデータベースをクリーンアップします。

例外:ジョブが実行時に停止します。スレッドダンプには、JDBC ドライバーの読み込みポイント (通常は Class.forName のような位置) で停止していることが示されます。

  • 考えられる原因:JDK 8 は JDBC ドライバーをロードする際にいくつかの静的初期化操作を実行します。複数のスレッドが同時にロードすると、競合状態が発生する可能性があります。

  • ソリューション:再試行するか、この状況に対応したコネクタのバージョン 6.0.7 を使用します。

例外:JDBC モードでバイナリログを消費する際、「no table is defined in publication」または「The table xxx has no slot named xxx」という例外がスローされます。

  • 考えられる原因:テーブルが削除され、同じ名前のテーブルが再作成されましたが、テーブルにバインドされたパブリケーションは削除されていません。

  • ソリューション:この例外が発生した場合、Hologres で select * from pg_publication where pubname not in (select pubname from pg_publication_tables); 文を実行して、クリーンアップされていないパブリケーションをクエリします。次に、drop publication xx; 文を実行して、残存するパブリケーションを削除し、タスクを再起動します。

エラー:タスクをオンラインにした際に「permission denied for database」という例外がスローされます。

  • 考えられる原因:Hologres V1.3 および V2.0 では、JDBC モードでバイナリログを消費する際に権限設定が必要です。

  • ソリューション:Hologres を V2.1 にアップグレードし、VVR-8.0.5 以降のコネクタを使用します。バイナリログを消費するには、テーブルに対する読み取り専用権限のみが必要です。アップグレードが難しい場合は、「制限事項」の権限付与操作を参照してください。

エラー:table writer init failed: Fail to fetch table meta from sm

  • 考えられる原因:truncate または rename 操作後にテーブルに書き込みを行っています。

  • ソリューション:これが偶発的に発生する場合は、無視しても問題ありません。タスクはフェールオーバー後に回復します。Hologres バージョン V2.1.1 ~ V2.1.14 では、FE ノードのリプレイキャッシュ時間が増加しており、DML 後の DDL リプレイが遅くなります。同様の例外が発生する確率が高くなる可能性があります。最新の V2.1 バージョンにアップグレードしてください。

例外:コネクタ依存関係を使用して Datastream タスクをローカルで開発する際、java.lang.ClassNotFoundException: com.alibaba.ververica.connectors.hologres.binlog.source.reader.HologresBinlogRecordEmitter のような例外が発生します。

  • 考えられる原因:Realtime Compute for Apache Flink の商用コネクタ JAR パッケージは、一部のランタイムクラスを提供していません。

  • ソリューション:「コネクタを含むタスクのローカルでの実行とデバッグ」ドキュメントを参照して、依存関係を調整し、通常どおりデバッグおよび開発を行います。

例外:JDBC モードでバイナリログを消費する際、「Binlog Convert Failed」例外が発生するか、一部のシャードのデータ読み取りが特定の時点で停止します。

  • 考えられる原因:Hologres インスタンスのゲートウェイがバックエンドからタイムアウト例外を受信した際、例外をクライアントに返すプロセスに問題が発生し、データ読み取りが停止するか、データ解析失敗エラーが発生します。

  • ソリューション:これは通常、タスクにバックプレッシャーがある場合にのみ発生します。タスクにデータ読み取り停止の問題がある場合は、タスクを再起動して最新のチェックポイントから回復します。この問題を完全に解決するには、Hologres バージョンを 2.2.21 以降にアップグレードします。