変更追跡タスクが失敗したり、予期しない動作を示したりした場合、根本原因を特定するのは困難です。特に、SDK を使用せずにデータを消費している場合、環境ごとに SDK のバージョンが異なる場合、またはクライアントが分離されたネットワークで実行されている場合などに該当します。DTS 診断ツールキットを使用すると、変更追跡クライアントに対して対象を絞った診断を実行し、構造化されたログ出力を読み取ることで、正確な障害箇所を特定できます。
ツールキットを実行すると、DTS コンソール上で指定されたコンシューマーグループのコンシューマオフセットが更新されます。subscribeMode が SUBSCRIBE に設定されている場合、サーバー側で記録されるコンシューマオフセットは更新されません。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
変更追跡クライアントに Java 開発キット(JDK)1.8 以降がインストール済みであること
ツールキットのセットアップと実行
ステップ 1:ツールキットのダウンロード
dts_subscribe_sdk_dep_demo ツールキットを変更追跡クライアントにダウンロードし、解凍します。
ステップ 2:ツールキットの設定
解凍したディレクトリ内の config ファイルを編集します。下表にパラメーターを示します。
| パラメーター | 説明 | 値の取得方法 |
|---|---|---|
brokerUrl | 変更追跡インスタンスのエンドポイントおよびポート番号です。SDK クライアントを実行する Elastic Compute Service (ECS) インスタンスが、変更追跡インスタンスと同じクラシックネットワークまたは VPC 内にある場合は、遅延を最小限に抑えるため、内部ネットワークのエンドポイントを使用してください。 | DTS コンソールでインスタンス ID をクリックします。基本情報 ページで、エンドポイントおよびポート番号をコピーします。 |
topic | 変更追跡インスタンスのトピック名です。 | DTS コンソールでインスタンス ID をクリックします。基本情報 ページで、追跡対象のトピックをコピーします。 |
sid | コンシューマーグループの ID です。 | DTS コンソールでインスタンス ID をクリックします。左側のナビゲーションウィンドウで データ消費 をクリックします。コンシューマーグループ ID およびアカウントをコピーします。パスワードは、コンシューマーグループを作成する際に自動的に設定されます。 |
userName | コンシューマーグループのアカウントです。このトピックで説明する SDK クライアントを使用しない場合は、値を <ユーザー名>-<コンシューマーグループ ID> の形式(例:dtstest-dtsae******bpv)で指定してください。形式が正しくない場合、接続に失敗します。 | sid を参照してください。 |
password | コンシューマーグループアカウントのパスワードです。 | sid を参照してください。 |
initCheckpoint | 消費チェックポイントです。SDK クライアントがデータの消費を開始する UNIX タイムスタンプ(例:1620962769)を指定します。このパラメーターは、subscribeMode が ASSIGN かつ isForceUseInitCheckpoint が true の場合にのみ有効です。中断後の再開時にデータ損失を防ぐ、または特定の時刻から消費を開始する場合に使用します。 | タイムスタンプは、変更追跡インスタンスのデータ範囲内である必要があります。 |
subscribeMode | SDK クライアントがコンシューマーグループに接続するモードです。単一の SDK クライアントでコンシューマーグループを操作する場合は ASSIGN を使用します。ディザスタリカバリのために複数の SDK クライアントで同一のコンシューマーグループを操作する場合は SUBSCRIBE を使用します。 | 該当なし |
isForceUseInitCheckpoint | 指定したオフセットを強制的に使用してデータ変更を追跡するかどうかを指定します。有効な値は true および false です。 | 該当なし |
ステップ 3:ツールキットの実行
ツールキットを解凍したディレクトリで、以下のコマンドを実行します。
java -jar dts_subscribe_sdk_dep_demo-1.0-SNAPSHOT-jar-with-dependencies.jar configステップ 4:ログ出力の確認
同じディレクトリ内の dts-new-subscribe.log を開きます。以下のセクションを参照して、出力内容を解釈し、問題を修正してください。
ログ出力の解釈
まず、タスクが正常に実行されているかを確認します。HEARTBEAT レコードが表示される場合は、特別な操作は必要ありません。HEARTBEAT が表示されない場合は、以下のエラーのパターンを特定し、対応する修正を行ってください。
タスクが正常に実行中
以下のような HEARTBEAT レコードは、変更追跡タスクが正常に実行されていることを示します。
[2022-01-04 17:10:53.949] [INFO ]
[com.aliyun.dts.subscribe.clients.recordprocessor.EtlRecordProcessor]
[com.aliyun.dts.subscribe.clients.recordprocessor.DefaultRecordPrintListener:49] -
RecordID [13082769]
RecordTimestamp [1641284702]
Source [{"sourceType": "MySQL", "version": "5.6.16-log"}]
RecordType [HEARTBEAT]変更追跡エンドポイントへの接続ができない
ログ内のエラー:
ERROR CheckResult{isOk=false, errMsg='telnet dts-cn-hangzhou.aliyuncs.com:18009 failed, please check the network and if the brokerUrl is correct'} (com.aliyun.dts.subscribe.clients.DefaultDTSConsumer)または
telnet real node xxx failed, please check the network原因: 指定された変更追跡インスタンスのエンドポイントが無効であるか、変更追跡インスタンスへの接続が確立できません。
修正方法:brokerUrl パラメーターを、ご使用のネットワーク環境用の有効なエンドポイントおよびポートで更新するには、config ファイルを編集します。
認証に失敗した
ログ内のエラー:
ERROR CheckResult{isOk=false, errMsg='build kafka consumer failed, error: org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic metadata, probably the user name or password is wrong'} (com.aliyun.dts.subscribe.clients.DefaultDTSConsumer)原因: コンシューマーグループの認証情報が無効です。このトピックで説明する SDK クライアントを使用しない場合は、userName にユーザー名とコンシューマーグループ ID をハイフンで区切って含める必要があります。
修正方法: userName および password パラメーターを、config ファイル内で更新してください。userName が要件に応じて <ユーザー名>-<コンシューマーグループ ID> の形式になっていることを確認してください。
消費チェックポイントが範囲外
ログ内のエラー:
com.aliyun.dts.subscribe.clients.exception.TimestampSeekException: RecordGenerator:seek timestamp for topic [cn_hangzhou_rm_bp11tv2923n87081s_rdsdt_dtsacct-0] with timestamp [1610249501] failed原因: コンシューマオフセットが、変更追跡インスタンスのデータ範囲外です。
修正: initCheckpoint パラメーターを config ファイル内で、変更追跡インスタンスの現在のデータ範囲内にある UNIX タイムスタンプに更新します。
データフローの遅延を診断する
ログにエラーが表示されず、データが想定通りに流れていない場合、ログ内のキュー深度値を確認してください。
DStoreRecordQueueおよびDefaultUserRecordQueueの値が継続的に0のままの場合、サーバーからのデータ読み取り速度が遅くなっています。DStoreRecordQueueおよびDefaultUserRecordQueueの値が継続的に512のままの場合、クライアントによる追跡データ変更の消費速度が遅くなっています。