このトピックでは、変更追跡クライアントで専用の 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) インスタンスがデータサブスクリプションチャネルと同じ Virtual Private Cloud (VPC) にある場合は、プライベート IP アドレスを使用してサブスクリプションを行うと、ネットワーク遅延を最小限に抑えることができます。
DTS コンソールで、対象のサブスクリプションインスタンスの ID をクリックします。基本情報 ページの ネットワーク エリアで、エンドポイントとポート番号を取得できます。
topicデータサブスクリプションチャネルのトピック。
DTS コンソールで、対象のサブスクリプションインスタンスの ID をクリックします。基本情報 ページの 基本情報 セクションで、トピック を取得できます。
sidコンシューマーグループ ID。
DTS コンソールで、ターゲットサブスクリプションインスタンスの ID をクリックし、左側の データ消費 タブをクリックします。 [コンシューマーグループ ID] と アカウント の情報を取得できます。
説明これは、コンシューマーグループの作成時に設定したパスワードです。
userNameコンシューマーグループのアカウント。
警告このトピックで提供されているクライアントを使用していない場合は、ユーザー名を
<コンシューマーグループアカウント>-<コンシューマーグループ ID>の形式 (例:dtstest-dtsae******bpv) で設定する必要があります。そうしないと、接続は失敗します。passwordアカウントのパスワード。
initCheckpoint開始コンシューマーオフセット。UNIX タイムスタンプ (例: 1620962769) として指定します。
重要-
このパラメーターは、
subscribeModeを ASSIGN に、isForceUseInitCheckpointを true に設定した場合にのみ有効になります。 -
コンシューマーオフセットは、次の目的で使用できます。
-
ビジネスプロセスが中断された後、データ損失を防ぐには、最後のコンシューマーオフセットを渡してデータコンシュームを再開します。
-
変更追跡クライアントの起動時に、目的のコンシューマーオフセットを渡してサブスクリプションの開始点を調整し、オンデマンドでデータをコンシュームします。
-
DTS コンソールの 変更の記録 タブで、ターゲットインスタンスの データ範囲 を確認します。コンシューマーオフセットは、サブスクリプションインスタンスのデータ範囲内にあり、Unix タイムスタンプに変換されている必要があります。
説明検索エンジンを使用して、UNIX タイムスタンプ変換ツールを見つけることができます。
subscribeModeSDK クライアントの動作モード。有効な値は次のとおりです。
-
ASSIGN :このモードでは、コンシューマーグループごとに 1 つの SDK クライアントのみがサブスクリプションデータをコンシュームできます。
-
SUBSCRIBE :このモードでは、ディザスタリカバリのために同じコンシューマーグループで複数の SDK クライアントを起動できます。
該当なし
isForceUseInitCheckpointサブスクリプションを
initCheckpointオフセットから強制的に開始するかどうかを指定します。有効な値は true と false です。該当なし
-
-
configファイルをツールキットと同じディレクトリにコピーします。 -
ツールキットのディレクトリで次のコマンドを実行します。
java -jar dts_subscribe_sdk_dep_demo-1.0-SNAPSHOT-jar-with-dependencies.jar config -
コマンドを実行したディレクトリにあるログファイル 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が正しくないか、到達できないため、接続に失敗しました。configファイルに正しいbrokerUrlを入力してください。telnet real node xxx failed, please check the networkネットワークエラーにより、クライアントが DTS ブローカーノードに接続できません。
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)ユーザー名またはパスワードが正しくないため、接続に失敗しました。
configファイルに正しい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コンシューマーオフセットが指定された範囲外であるため、接続に失敗しました。
configファイルで、initCheckpointパラメーターをサブスクリプションインスタンスのデータ範囲内の値に設定してください。説明DStoreRecordQueueおよびDefaultUserRecordQueueメッセージキューパラメーターの値が一貫して 0 のままである場合、DTS サーバーからのデータ取得時にボトルネックが発生していることを示します。値が一貫してデフォルトの 512 のままである場合、変更追跡クライアントがサブスクリプションデータをゆっくりとコンシュームしていることを示します。