このトピックでは、変更追跡クライアントで専用のData Transmission Service (DTS) ツールキットを使用して、新しいバージョンの変更追跡タスクに関する問題をトラブルシューティングする方法について説明します。
背景情報
追跡されたデータがSDKを使用せずに消費され、SDKに多くの変更が加えられ、変更追跡クライアントが異なる環境で実行されるシナリオでは、変更追跡タスクの問題をトラブルシューティングすることは困難です。 DTSは、変更追跡タスクに関する問題のトラブルシューティングに役立つツールキットを提供します。
ツールキットを使用すると、コンソールで指定されたコンシューマーグループのコンシューマーオフセットが更新されますが、SUBSCRIBEモードでサーバーに記録されたコンシューマーオフセットは更新されません。
前提条件
変更追跡クライアントにJava Development Kit (JDK) がインストールされています。 JDK 1.8以降のインストールを推奨します。
手順
dts_subscribe_sdk_dep_demoツールキットをクライアントにダウンロードして解凍します。
次の表に示すパラメーターを設定して、設定ファイルconfigを変更します。
表 1. 設定ファイルのパラメーターを
パラメーター
説明
パラメータ値を取得するメソッド
brokerUrl変更追跡インスタンスのエンドポイントとポート番号。
説明内部ネットワーク上のデータ変更を追跡する場合、ネットワーク遅延は最小限に抑えられます。 これは、SDKクライアントをデプロイするElastic Compute Service (ECS) インスタンスが、クラシックネットワークまたは変更追跡インスタンスと同じ仮想プライベートクラウド (VPC) に属している場合に適用されます。
DTSコンソールで、インスタンスIDをクリックします。 [タスク管理] ページで、エンドポイントとポート番号を取得できます。

トピック変更追跡インスタンスのトピックの名前。
DTSコンソールで、インスタンスIDをクリックします。 [タスク管理] ページで、追跡対象のトピックを取得できます。

sidコンシューマーグループの ID です。
DTSコンソールで、インスタンスIDをクリックします。 左側のナビゲーションウィンドウで、[データの使用] をクリックします。 コンシューマーグループのIDとアカウントを取得できます。
説明コンシューマーグループアカウントのパスワードは、コンシューマーグループの作成時に自動的に指定されます。

userName消費者グループのアカウント。
警告このトピックで使用されているSDKクライアントを使用していない場合は、このパラメーターを
<Username>-<Consumer group ID>の形式で指定する必要があります。 そうしないと、接続は失敗します。 例:dtstest-dtsae ****** bpvパスワードアカウントのパスワードを入力します。
initCheckpoint消費者オフセット。 SDKクライアントが最初のデータレコードを消費する時間です。 この値は UNIX タイムスタンプです。 例: 1620962769。
重要このパラメーターは、subscribeModeパラメーターがASSIGNに設定され、isForceUseInitCheckpointパラメーターがtrueに設定されている場合にのみ有効になります。
コンシューマオフセットは、次のシナリオで使用できます。
消費プロセスが中断された後、消費者オフセットを指定してデータ消費を再開できます。 これにより、データの損失を防ぐことができます。
変更追跡クライアントを起動するときに、オンデマンドでデータを消費するための消費者オフセットを指定できます。
コンシューマオフセットは、変更追跡インスタンスのデータ範囲内である必要があります。 次の図は、データ範囲を示しています。 コンシューマオフセットは、UNIXタイムスタンプに変換する必要があります。
説明検索エンジンを使用して、UNIXタイムスタンプコンバーターを取得できます。
subscribeModeSDKクライアントを使用するモード。 有効な値:
ASSIGN: コンシューマーグループに使用できるSDKクライアントは1つだけです。
SUBSCRIBE: 複数のSDKクライアントを使用して、コンシューマーグループでディザスタリカバリを実装できます。
非該当
isForceUseInitCheckpoint指定したオフセットを強制的に使用してデータ変更を追跡するかどうかを指定します。 有効な値は true と false です。
非該当
ツールキットが解凍されているディレクトリで次のコマンドを実行します。
java -jar dts_subscribe_sdk_dep_demo-1.0-SNAPSHOT-jar-with-dependencies.jar設定コマンドが実行されているディレクトリにあるdts-new-subscribe.logログファイルを表示します。 問題のトラブルシューティングについては、次の表を参照してください。
ログデータ
説明
解決策
[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)変更追跡インスタンスの指定されたエンドポイントが無効です。
設定ファイルの
brokerUrlパラメーターに有効な値を指定します。telnet real node xxx failed, please check the network変更追跡インスタンスへの接続は確立できません。
設定ファイルの
brokerUrlパラメーターに有効な値を指定します。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)指定されたユーザー名またはパスワードは無効です。
設定ファイルの
userNameパラメーターとpasswordパラメーターに有効な値を指定します。com.aliyun.dts.subscribe.clients.exception.TimestampSeekException: RecordGenerator:seek timestamp for topic [cn_hangzhou_rm_bp11tv2923n87081s_rdsdt_dtsacct-0] with timestamp [1610249501] failedコンシューマオフセットが変更追跡インスタンスのデータ範囲内にないため、コンシューマオフセットが低下します。
設定ファイルの
initCheckpointパラメーターに、変更追跡インスタンスのデータ範囲内の値を指定します。説明DStoreRecordQueueおよびDefaultUserRecordQueueパラメーターの値が0のままである場合、サーバーからのデータの読み取り速度は遅くなります。 これらのパラメータの値が512のままである場合、クライアントは追跡されたデータ変更を低速で消費する。