Data Studio でタスクを開発して本番環境にデプロイした後、オペレーションセンターでリアルタイム同期タスクの実行、タスクステータスの監視、ランタイムメトリクスの表示ができます。
前提条件
リアルタイム同期タスクが作成・デプロイされています。詳細については、「単一テーブルのリアルタイム同期タスクの設定」をご参照ください。
DataWorks Data Integration において、単一テーブルのリアルタイム同期タスクとは、単一のソーステーブル、トピック、Logstore、または同様の粒度のデータオブジェクトから宛先へデータを同期するパイプラインです。日常の運用では、タスクの異常を迅速に特定し、パフォーマンスパラメーターを調整し、データ整合性を確保する必要があります。
前提条件
単一テーブルのリアルタイム同期タスクを実行する前に、次の前提条件が満たされていることを確認してください。
|
カテゴリ |
要件 |
検証方法 |
|
ソース権限 |
ソースからメタデータを読み取り、ソーステーブルの完全な列情報を取得する権限があること。 |
設定済みのアカウントを使用してソースにアクセスし、テーブル構造と列情報を読み取れることを確認します。 |
|
デスティネーション権限 |
デスティネーションにテーブルを作成するか、データを書き込む権限があること。 |
設定済みのアカウントを使用して、デスティネーションへのテーブル作成またはデータ書き込みのテストを実行します。 |
|
リソースグループ |
リソースグループの仕様が、完全初期化フェーズのコンピューティングとネットワークの要件を満たしていること。 |
リソースグループが利用可能であり、その仕様が同期タスクの要件を満たしていることを確認します。 |
|
ネットワーク接続性 |
ソースからチャネルを経由してデスティネーションまでネットワーク接続性が確立されていること。 |
ネットワークテストツールを使用して、すべてのノードが到達可能であることを確認します。 |
単一テーブルのリアルタイム同期:運用保守とチューニング
単一テーブルのリアルタイム同期タスクの日常的な運用保守、トラブルシューティング、パフォーマンスチューニングについては、以下のガイダンスを参照してください。単一テーブルのリアルタイム同期タスクとは、単一のソーステーブル、トピック、Logstore、または同様の粒度のデータオブジェクトから送信先へリアルタイムでデータを同期するパイプラインを指します。
単一テーブルのリアルタイム同期を個別に扱うのは、一部のソース、デスティネーション、またはチャネルの機能がデータベースレベルのリアルタイム同期に適していない場合や、単一の特定のデータオブジェクトのみを同期する必要があるためです。ソースとチャネルの機能が対応している場合は、データベースレベルのリアルタイム同期タスクを使用し、1 つのテーブルのみを選択して単一テーブルのリアルタイム同期を処理することを推奨します。この方法では、スキーマ移行、完全初期化、増分取り込み、後続テーブルの拡張といったデータベースレベルの機能を活用できます。エントリポイントに関係なく、以下の内容では単一テーブルのリアルタイムパイプラインの運用保守のみを扱い、データベースレベルの複数テーブルのバッチ管理、データベースレベルのバッチ同期、またはデータベースレベルの完全および増分リアルタイム同期については扱いません。
適用可能なチャネルと境界
まず、タスクタイプ、チャネルの機能、トラブルシューティングの焦点を評価します。
|
評価項目 |
適用範囲 |
該当なし / 主な焦点 |
|
タスクタイプ |
単一のテーブル、トピック、Logstore、または同様の粒度の細かいデータストリーム |
データベースレベルのテーブル検出、バッチでのテーブル追加、またはテーブルの削除とデプロイ解除は対象外です。 |
|
典型的なチャネル |
Kafka / DataHub / SLS / LogHub → Hologres / MaxCompute / Kafka / Doris / StarRocks / Lindorm / DLF / OSS |
データベースソースがデータベースレベルのリアルタイム同期のために単一テーブルの選択をサポートしている場合は、まずデータベースレベルのリアルタイム同期を使用してください。 |
|
トラブルシューティングの焦点 |
オフセット、ログ保持、プライマリキー、DDL、コンシューマーラグ、メッセージフォーマット、列解析、ダーティデータ、宛先のスロットリング |
データベースレベルのテーブル追加、削除、またはデプロイ解除の経験を適用しないでください。 |
Hologres は、単一テーブルのリアルタイム同期のソースとしても機能します。 Hologres → Hologres、Hologres → MaxCompute、Hologres → Doris などのテーブルレベルのリアルタイムパイプラインの場合、単一テーブルのリアルタイムトラブルシューティングアプローチに従い、ソーステーブルの権限、Binlog / 変更データキャプチャ (CDC)、プライマリキー、列マッピング、および宛先の書き込みセマンティクスに焦点を当ててください。
重要な境界:単一テーブルのリアルタイム同期は、データベースレベルのリアルタイム同期の簡易版ではありません。ソースの権限、メッセージモデル、データ形式、または宛先の書き込みセマンティクスがデータベースレベルのリアルタイム同期と互換性がないシナリオにより適しています。 Hologres がソースとして使用される場合、テーブルレベルのリアルタイムパイプラインのトラブルシューティングアプローチに従ってください。
タスクステージ
|
ステージ |
説明 |
運用保守の焦点 |
|
スキーマ準備 |
ソースカラム、プライマリキー、パーティション、またはメッセージフォーマットを読み取り、ターゲットスキーマを作成または検証します。 |
ソースメタデータの権限、ターゲットテーブルの作成または書き込み権限、カラムタイプ、プライマリキー、パーティション、およびマッピングルール |
|
完全初期化 |
タスク開始前に存在していた履歴データをターゲットに書き込みます。このステージが含まれるかどうかは、タスク設定とチャネルの機能によって異なります。 |
分割キー、完全同期の同時実行数、ソース接続数、リソースグループの仕様、およびターゲットの書き込みキャパシティ |
|
リアルタイム増分同期 |
Binlog、WAL、ログ、メッセージ、または変更イベントを継続的に取り込み、ターゲットに書き込みます。 |
オフセット、ビジネスレイテンシー、スループット、チェックポイント、フェールオーバー、DDL、ダーティデータ、およびターゲットの書き込みキャパシティ |
単一テーブルのリアルタイムタスクにおけるリスクは、通常 2 つのカテゴリに分類されます。1 つはオフセットとログ保持です。タスクが長時間停止すると、元のオフセットから再開できなくなる可能性があります。もう 1 つはターゲットの書き込みセマンティクスです。プライマリキー、書き込みモード、パーティション、またはカラムマッピングに一貫性がない場合、Update、Delete、またはべき等な書き込みが期待どおりの結果にならない可能性があります。
一般的な運用保守オペレーション
開始と停止
-
タスクを開始したら、まずスキーマの準備が完了したことを確認し、次に完全初期化が開始され、進行しているかを確認し、最後に増分同期が継続的にデータを読み書きしていることを確認します。メッセージソースのタスクでは、コンシューマーオフセットとメッセージバックログも監視します。データベースログベースのタスクでは、Binlog、WAL、またはログ保持期間を監視します。
-
タスクを停止する前に、ソースログまたはメッセージのログ保持期間がダウンタイムをカバーできるかを確認します。ダウンタイムが保持期間を超える場合、タスクは元のオフセットから再開できない可能性があります。この場合は通常、オフセットのリセット、履歴バックログのスキップ、または再初期化が必要です。これらの操作を行う前に、重複書き込みとデータ損失のリスクを評価してください。
設定の変更
単一テーブルのリアルタイムタスクにおける一般的な変更には、列マッピング、主キー、書き込みモード、パーティションルール、同時実行数、リソース、オフセット、ダーティデータ処理ポリシーの調整などがあります。
|
変更タイプ |
リスク |
推奨事項 |
|
列マッピングの変更 |
列の欠落、型変換の失敗、または宛先への書き込みエラーが発生する可能性があります。 |
変更を送信する前に、ソース列、宛先列、列の型、およびデフォルト値を確認してください。 |
|
主キーまたは書き込みモードの変更 |
Update、Delete、べき等書き込み、重複排除の結果に影響する可能性があります。 |
まず、宛先が対応する書き込みセマンティクスをサポートしているかを確認し、そのうえで履歴データの再書き込みが必要かどうかを評価してください。 |
|
パーティションルールの変更 |
新しいパーティションへの書き込み、誤ったパーティションへの書き込み、または過剰な小さなパーティションの生成につながる可能性があります。 |
変更を送信する前に、パーティション列の粒度、パーティション式、および宛先のパーティション上限を確認してください。 |
|
同時実行数とリソースの調整 |
ソース、宛先、またはリソースグループへの負荷が増加する可能性があります。 |
段階的に調整し、各調整の後にレイテンシー、スループット、チェックポイント、フェールオーバーを監視してください。 |
|
オフセットのリセット |
重複消費やデータのスキップが発生する可能性があります。 |
まず、業務上許容できる復旧ポイントを確認し、そのうえでリセットの前後の時刻とオフセットを記録してください。 |
|
ダーティデータ処理ポリシーの調整 |
タスクの実行を継続できる一方で、異常レコードが破棄される可能性があります。 |
安易にしきい値を引き上げて問題を回避することは推奨しません。まず、ダーティデータがビジネス結果に影響するかどうかを判断してください。 |
|
データソースの変更 |
実行中のタスクは、起動時に読み込まれた古い設定を使用し続けます。変更は、タスクを再実行または再起動した後にのみ有効になります。タスクを一時停止してからデータソースを変更した場合、再開できるとは限らず、タスクは最後に保存されたオフセットから継続できない可能性があります。 |
変更が有効になるタイミングを確認し、再起動が許容できるかどうかを評価してください。タスクが元のオフセットから再開できずエラーが発生した場合は、タスクをステートレスに再実行してください。 |
アラート設定
単一テーブルのリアルタイムタスクでは、少なくとも、タスクステータス、ビジネスレイテンシー、フェールオーバーを監視してください。チャネルの機能とタスク設定に応じて、リソース使用率、書き込みエラー、DDL 通知、メッセージバックログに関するアラートも追加してください。
メッセージソースのタスクでは、ソーストピック、シャード、Logstore、またはコンシューマーグループのバックログも監視してください。データベースログベースのタスクでは、Binlog、WAL、アーカイブログ、またはレプリケーションスロットの保持状況を監視してください。タスク失敗のアラートのみを設定しても、タスクは実行中であるにもかかわらずレイテンシーが継続的に増加する、書き込みが徐々に遅くなる、またはオフセットが長時間進まないといった問題を検知できません。
トラブルシューティング
タスクのデータ出力なし
タスクが実行中と表示されているにもかかわらずターゲットに新しいデータが表示されない場合は、まずソースに実際に新しいデータがあるかを確認してください。次に、リーダーがデータを消費していないのか、パイプラインで処理エラーが発生しているのか、またはライターがデータをコミットしていないのかを切り分けます。
トラブルシューティングの手順:
-
ソーステーブル、トピック、Logstore、またはログのオフセットに新しいデータがあるかを確認してください。
-
タスクが完全初期化、リアルタイム増分同期、またはフェールオーバーの状態であるかを確認してください。
-
読み取りメトリクス、書き込みメトリクス、ビジネスレイテンシー、チェックポイントが正常に進行しているかを確認してください。
-
ターゲットテーブル、ターゲットパーティション、プライマリキー、書き込みモードが設定と一致しているかを確認してください。
-
ダーティデータ、カラムマッピングの失敗、またはターゲット権限の問題がないかを確認してください。
ランタイムの詳細にある DML/DDL 統計が短時間データなしを示していても、ログとターゲットへの書き込みが正常である場合は、メトリクス収集のレイテンシーや収集異常も確認してください。監視表示の問題を同期の中断と誤認しないようにしてください。
完全初期化の遅延または失敗
完全初期化が遅い場合は、まずボトルネックがソースの読み取り、ネットワーク、リソースグループ、ターゲットへの書き込み、またはデータ分割の偏りのどこにあるかを特定してください。
|
症状 |
考えられる原因 |
推奨事項 |
|
完全初期化が長時間開始されない |
リソースのキューイング、ソースまたはターゲットの接続性の問題、またはターゲットテーブルの作成失敗 |
リソースグループのステータス、データソースの接続性、ターゲット権限を確認してください。 |
|
完全読み取りが遅い |
不適切な分割キー、ソース SQL がインデックスを使用していない、ソース負荷が高い、または接続数が不足している |
分散がより均一で、インデックスを利用できる分割キーを選択してください。同時実行数は適切に調整し、ソースに負荷がかかっている場合はスロットリングを行うか、負荷が集中しないように実行タイミングをずらしてください。 |
|
完全書き込みが遅い |
ターゲットのスロットリング、パーティション数が多すぎる、またはバッチコミットのオーバーヘッドが大きい |
ターゲットの書き込みキャパシティ、パーティション数、バッチ書き込みパラメータ、リソースグループの仕様を確認してください。 |
|
完全初期化の失敗 |
互換性のないカラム型、プライマリキーの競合、ターゲットの制約、またはダーティデータがしきい値を超過している |
まず失敗しているカラムとターゲットのエラーを特定し、そのうえでマッピングの調整、データのクレンジング、またはターゲットスキーマの変更を行ってください。 |
完全初期化フェーズでは、平均スループットだけを基準にしないでください。少数の大きなシャード、ワイドテーブル、大きなカラム、またはホットパーティションが、全体の完了時間を左右する場合があります。
リアルタイムレイテンシーの増加
リアルタイムレイテンシーが増加する場合は、レイテンシーが継続的に減少しているかを確認してください。タスクが完全初期化を完了した直後であれば、リアルタイムパイプラインが完全同期フェーズ中に蓄積された増分データをリプレイしている可能性があります。レイテンシーが増加し続ける場合は、ボトルネックがリーダー、ライター、リソース、ネットワーク、または外部システムのどこにあるかを特定してください。
次の順序でトラブルシューティングすることを推奨します:
-
タスクのランタイム詳細でウィンドウ待機時間を確認し、ボトルネックが主にリーダーとライターのどちらにあるかを判断してください。
-
レイテンシーが高い期間のタスクログを確認し、
Error、Exception、OutOfMemoryなどのキーワードを検索してください。 -
フェールオーバーの記録を確認し、フェールオーバーの頻発、OutOfMemory、または外部サービス例外が発生していないかを確認してください。
-
ランタイムメトリクスとイベントを確認し、スループット、バックプレッシャー、チェックポイント、JVM メモリ、GC、DDL イベント、ダーティデータに重点を置いてください。
-
次に、ソース、ターゲット、リソース、同時実行数、ネットワークを確認して原因を切り分けてください。ボトルネックを特定する前に、同時実行数やリソースを増やすことは推奨しません。
ウィンドウ待機時間は、一次指標として使用できます:
|
指標 |
考えられる原因 |
次のステップ |
|
リーダー待機時間が長い |
ソースの読み取りが遅い、パーティションまたはシャードの偏り、ソースのスロットリング、変更データ量の急増、またはログバックログ |
ソースの監視、パーティションまたはシャードの分散、Binlog/WAL/メッセージバックログ、リーダーのデータ量を優先して確認してください。 |
|
ライター待機時間が長い |
ターゲットへの書き込みが遅い、ターゲットのスロットリング、動的パーティションが多すぎる、バッチコミットが遅い、またはネットワーク帯域幅が不足している |
ターゲットのリソース、書き込み QPS、シンクログ、バッチコミットのオーバーヘッド、動的パーティションを優先して確認してください。 |
|
リーダーとライターの待機時間がどちらも長い |
タスクのリソース不足、バックプレッシャー、チェックポイントの遅延、フェールオーバーの頻発、または外部システムの不安定さ |
フェールオーバー、JVM/GC、チェックポイント、リソースグループの仕様、タスクの同時実行数を優先して確認してください。 |
ボトルネックの箇所を特定したら、具体的な症状に応じて、さらに原因を切り分けてください:
|
症状 |
考えられる原因 |
推奨事項 |
|
レイテンシーが継続的に増加する |
ソースの書き込み速度が消費速度を上回っている、ネットワーク帯域幅が不足している、またはターゲットへの書き込みが遅い |
ソースの生成レート、読み取りレート、書き込みレート、ターゲットのスロットリングを個別に確認してください。 |
|
リーダーの待機またはバックプレッシャーが顕著 |
大規模トランザクション、ログバックログ、メッセージパーティションのホットスポット、またはソースのスロットリング |
ソースの書き込みピーク、ログの増加、パーティションまたはシャードの分散を確認してください。 |
|
ライター待機時間が長い |
ターゲットへの書き込みが遅い、バッチコミットが小さすぎる、接続数が不足している、またはパーティション数が多すぎる |
まずターゲットのリソースと書き込み上限を優先して確認し、そのうえでバッチ、フラッシュ、コミット、または接続プールのパラメータを調整してください。 |
|
チェックポイントの遅延または失敗 |
ライターのコミットが遅い、ステートサイズが過大、外部サービスが不安定、またはリソースが不足している |
チェックポイントの継続時間、failedCount、ステートサイズ、ログを使用して問題を特定してください。 |
|
フェールオーバーの頻発 |
メモリ不足、外部サービス例外、カラムマッピングの失敗、または DDL 処理エラー |
例外のスタックトレース、ダーティデータ、フェールオーバーの前後の DDL イベントを確認してください。 |
|
ログに |
タスクのメモリ不足、または単一の並行スレッドに対する処理負荷が過大 |
CU またはメモリを段階的に増やし、JVM、GC、チェックポイント、フェールオーバーのメトリクスが改善するかを監視してください。 |
-
Kafka、DataHub、LogHub などのメッセージソースでは、パーティション数またはシャード数に注意してください。通常、単一のパーティションまたはシャードは 1 つの並行スレッドでしか消費できません。データが少数のパーティションに集中している場合、同時実行数全体を増やしても効果がないことがあります。ソースの監視と併せて各リーダースレッドの累積バイト数を確認し、パーティションまたはシャードのホットスポットがないかを判断してください。
-
MySQL などのデータベースログベースのソースでは、大規模トランザクション、大量の DML、頻繁な DDL、Binlog の増加率に注意してください。同期速度が高くないにもかかわらずレイテンシーが増加し続ける場合は、ソースデータベースの監査ログ、CPU、I/O、接続数、Binlog の増加を確認し、ソースに負荷がかかっていないか、または未同期のデータベースやテーブルが大量の Binlog エントリを生成していないかを切り分けてください。
-
MaxCompute に書き込む場合、ログに
uploader map size has reached uploaderMapMaximumSizeが出力されるときは、通常、単一のフラッシュ間隔内における動的パーティション値の数が多すぎることを示します。まずパーティションの粒度、または動的パーティションカラムを調整し、秒単位のタイムスタンプ、注文 ID、ユーザー ID などの高カーディナリティ列をパーティション値として使用しないようにしてください。そのうえで、同時実行数またはリソースの増加が必要かを評価してください。
DDL イベント処理エラー
DDL イベントの後に、タスクが失敗する、レイテンシーが増加する、またはターゲットスキーマの不整合が発生する場合は、まず現在のチャネルが該当の DDL タイプをサポートしているか、およびタスクの DDL 処理ポリシーが何であるかを確認してください。
トラブルシューティングの重点:
-
ソースで発生した DDL 操作 (カラムの追加、カラムの削除、型の変更、リネーム、テーブルの作成、テーブルの削除、インデックスの変更など) を特定してください。
-
ターゲットが同じ DDL、または同等のスキーマ変更をサポートしているかを確認してください。
-
タスクのポリシーが、正常に処理、無視、アラート、停止のいずれに設定されているかを確認してください。
-
ターゲットアカウントに ALTER TABLE 権限があるかを確認してください。
-
DDL の前後で、カラムマッピング、プライマリキー、パーティションの一貫性が維持されているかを確認してください。
MySQL の仮想カラムにより MaxCompute が DDL ステートメントを解析できない
MySQL ソースでスキーマ変更が発生した後、リアルタイム同期タスクが停止し、ログに Parse exception - invalid token または ODPS-0130161 が報告されます。
これは、MySQL ソースで 仮想列 が作成され、その DDL 定義に REPLACE 関数など、MaxCompute がサポートしていない式や関数が含まれている場合に発生します。タスクがソース DDL を MaxCompute で実行可能なステートメントに変換する際、構文を解析できないため、解析に失敗してタスクが停止します。この障害は、DDL ステートメントの解析中に発生するものであり、列の型に互換性がないことや、権限が不十分であることが原因ではありません。列マッピングの調整や宛先への権限付与だけでは、この問題は解決しません。
この問題を解決するには、次の手順を実行してください:
-
MySQL ソースで仮想カラムの定義を一時的に無効化または削除し、サポートされていない構文を含む DDL イベントを発生させないようにしてください。
-
リアルタイム同期タスクを再起動し、起動時のオフセットを設定して、解析に失敗した DDL イベントをスキップしてください。オフセットのスキップは直前の未消費の変更もスキップするため、ビジネスとして許容できる復旧ポイントに基づいてオフセットを選択してください。
-
以降のソース側のスキーマ変更については、カラムマッピングを手動で設定し、ターゲットの各カラムに値を割り当てるか、未割り当てのままにするかを明示的に決定してください。これにより、仮想カラムに関連するカラムに想定外の値が書き込まれるのを防ぎます。
サポートされていない DDL 操作を直接無視することは推奨しません。DDL を無視するとタスクの実行を継続できる場合がありますが、その後の DML 書き込みが、カラムの不一致、プライマリキーの変更、またはターゲットスキーマの不整合により失敗し続ける可能性があります。
更新または削除で期待どおりの結果が得られない
更新または削除の操作後にターゲットデータが期待どおりにならない場合は、まずターゲットにレコードを特定できるプライマリキーまたは一意キーがあるか、およびソースとターゲットのプライマリキーのマッピングに一貫性があるかを確認してください。
主な原因は次のとおりです:
-
ターゲットにプライマリキーまたは一意キーがないため、レコード単位で更新または削除できません。
-
ソースのプライマリキーとターゲットのプライマリキーが一致していません。
-
プライマリキーのカラムが変換されている、リネームされている、または NULL として書き込まれています。
-
ターゲットの書き込みモードが更新または削除をサポートしていません。
-
タスクが削除操作を無視するように設定されている、または特殊な書き込みポリシーを使用しています。
-
書き込み失敗がダーティデータとして記録されていますが、タスクは実行を継続しています。
切り分けでは、まず少数のサンプルレコードを使用して、ソースイベント、タスクのマッピング、ターゲットの結果を確認してください。そのうえで、プライマリキー、書き込みモードを調整するか、またはターゲットテーブルを再初期化するかを判断してください。
ダーティデータの増加
ダーティデータが増加する場合は、ダーティデータのしきい値を直接引き上げないでください。まず、ダーティデータがターゲット側でのデータ欠落、NULL カラム、カラムの切り捨て、プライマリキーの競合、またはパーティション異常の原因になっていないかを確認してください。
トラブルシューティングの重点:
-
カラム型、長さ、精度、NOT NULL 制約が一致しているかを確認してください。
-
ターゲットのプライマリキー、一意キー、またはパーティションカラムが要件を満たしているかを確認してください。
-
ソース側で、過度に長い文字列、無効なエンコーディング、特殊な JSON、解析できないタイムスタンプ、またはサポートされていないデータ型が取り込まれていないかを確認してください。
-
ターゲットでスロットリング、書き込み失敗、またはサーバー側フィルタリングが発生していないかを確認してください。
これらの異常レコードを破棄してもビジネス上問題ないことを確認できた場合に限り、ダーティデータのしきい値を一時的に引き上げることを検討してください。その後、ソースデータまたはターゲットスキーマを修正してください。
チューニングの推奨事項
|
チューニング項目 |
適用シナリオ |
推奨事項 |
|
リソース仕様 / CU |
CPU、メモリ、ネットワーク、またはリソースグループの使用率が高い |
リソースを段階的に増やし、レイテンシー、フェールオーバー、チェックポイントが改善されるかどうかを監視します |
|
リアルタイム同時実行数 |
ソースとターゲットの両方に十分な並列度がある |
同時実行数を増やす前に、まず単一パーティション、単一シャード、または単一テーブルのホットスポットがないことを確認します |
|
全量同期の同時実行数と分割キー |
全量初期化が遅い |
均等に分散され、インデックスがあり、サポートされている型の分割キー列を選択します |
|
チェックポイント / フラッシュ間隔 |
ライターのコミットが頻繁、またはコミットのオーバーヘッドが高い |
少しずつ調整を行い、スループット、データ可視性のレイテンシー、失敗率を監視します。一度に大きな調整を行うことは推奨しません。 |
|
バッチ書き込みパラメーター |
ライターの待機時間が長い |
ターゲットの制限に基づいて、バッチ、フラッシュ、コミット、コネクションプールのパラメーターを調整します |
|
パーティションの粒度 |
ターゲットのパーティションが多すぎる、またはコミットのオーバーヘッドが高い |
秒レベルのタイムスタンプ、注文 ID、ユーザー ID などの高カーディナリティ列を動的パーティション値として使用することは避けてください |
|
メッセージソースのパーティション |
Kafka、DataHub、LogHub などのソースでレイテンシーが高い |
パーティションのホットスポットとコンシューマーの同時実行数制限を監視します。必要に応じて、ソースのパーティション設計を調整します。 |
|
トランスフォーマーロジック |
複雑な JSON 解析、列処理、または多数のフィルター規則 |
不要かつ複雑な変換を減らすか、リソースを増やして CPU とレイテンシーの変化を監視します |
チェックポイントまたはフラッシュ間隔を調整する場合、まず値を 5 秒から 10 秒または 30 秒へと小幅に増やし、その後 10 分から 30 分間、書き込みスループット、チェックポイントの所要時間、エンドツーエンドのレイテンシー、およびターゲットの負荷を監視してください。レイテンシーが減少してもデータ可視性がビジネス要件を満たさない場合は、間隔をより小さい値に戻します。
チューニング後、少なくとも 1 つの安定期間を観察します。タスクの再起動直後の短期的なスループットは、特にバックログデータ、ターゲットのスロットリング、またはチェックポイントの変動がある場合、長期的なパフォーマンスを反映しているとは限りません。
よくある質問
|
問題 |
トラブルシューティングの重点 |
推奨事項 |
|
タスクは実行中だが送信先にデータがない |
ソースに新しいデータがあるか、オフセットが進んでいるか、送信先にデータが書き込まれているか、メトリクス収集が正常か |
ソースデータ、タスクログ、DML メトリクス、送信先の結果を同時に確認してください。単一のページに依存して診断しないでください。 |
|
停止後に元のオフセットから再開できない |
Binlog、WAL、ログ、またはメッセージが保持期間を超えているか |
オフセットをリセットまたは再初期化する前に、重複消費、データのスキップ、ダウンストリームへの影響のリスクを評価してください |
|
Kafka またはその他のメッセージソースで非常に高いレイテンシーが発生する |
メッセージのタイムスタンプが過去のものか、コンシューマーオフセットが遅延しているか、パーティションのホットスポットが存在するか |
「履歴メッセージのタイムスタンプによる見かけ上の高レイテンシー」と実際の消費能力不足を区別してください |
|
DataHub の書き込みまたは消費のレイテンシーが高い |
スロットリングがトリガーされているか、 |
ソースのスロットリング、タスクのバックプレッシャー、ライターのスループットに基づいてパラメータまたはクォータを調整してください |
|
MaxCompute またはその他の送信先への書き込みが遅くなる |
パーティション数、トンネルセッション、チェックポイントコミットのオーバーヘッド |
単一のチェックポイントに含まれるパーティション数を減らすことを優先し、次にバッチコミットとリソースパラメータを調整してください |
|
Hologres の書き込みレイテンシーが高い |
送信先テーブルのプライマリキー、 |
まず、送信先テーブルの設計がリアルタイム書き込みに適しているかを確認し、次にタスクリソースとバッチ書き込みパラメータを調整してください |
|
送信先の更新または削除が反映されない |
送信先のプライマリキー、書き込みモード、カラムマッピング、ダーティデータログ |
サンプルレコードを使用してソースイベント、送信先のプライマリキー、実際の書き込み結果を優先的に検証してください |
|
DDL 後のタスク失敗 |
|
DDL イベントと失敗ログを確認して、再開前に送信先テーブルスキーマを手動で調整する必要があるかを判断してください |
高リスクオペレーションのチェックリスト
オフセットのリセット、タスクの再起動、プライマリキーの変更、書き込みモードの変更、重要なパラメータの変更、全量初期化の再実行、またはターゲットテーブルのクリアを行う前に、以下を確認してください:
-
ソースログまたはメッセージ保持期間が十分であるか。
-
現在のオフセット、業務時刻、およびターゲットの最新データが記録されているか。
-
操作によって重複書き込み、データのスキップ、またはターゲットの上書きが発生する可能性がないか。
-
下流システムがすでにターゲットデータを消費済みであるか。
-
未処理の DDL イベント、ダーティデータ、または頻繁なフェールオーバーがないか。
-
アラートがタスクステータス、ビジネスレイテンシー、フェールオーバー、書き込みエラー、およびダーティデータをカバーしているか。
タスクの再起動またはデプロイにおける重複書き込み
-
ターゲットテーブルにプライマリキーが定義されている場合、タスクを再起動またはデプロイしても重複データは発生しません。これは、再書き込みされたレコードがプライマリキーによって収束し、最終結果が一貫性を保つためです。
-
ターゲットテーブルにプライマリキーが定義されていない場合、重複データが発生する可能性があります。再起動またはデプロイ後、保存されたオフセットから変更がリプレイされ再度書き込まれることで、重複レコードが生成される場合があるためです。
-
最も古いオフセットからタスクを開始する場合は、このリスクに特に注意してください。ソースで保持されているすべての過去の変更が再度消費され、プライマリキーのないターゲットテーブルには大量の重複が蓄積される可能性があるためです。開始する前に、下流システムがこれを許容できることを確認するか、重複排除とデータのクリーンアップを事前に計画してください。