本文介紹如何在訂閱用戶端使用DTS定製工具包排查新版訂閱任務問題。
背景資訊
由於訂閱任務沒有使用SDK進行消費訂閱資料、對SDK進行過較多修改以及訂閱用戶端運行環境的不同,導致排查訂閱任務問題比較困難。在此提供一個工具包,在用戶端的環境執行後可以協助定位和排除DTS的問題。
使用該工具包會更新控制台上指定訂閱組的消費位點資訊,SUBSCRIBE模式依賴的服務端記錄的消費位點資訊不會更新。
前提條件
訂閱用戶端已安裝Java環境,建議安裝JDK 1.8及以上版本。
操作步驟
將工具包dts_subscribe_sdk_dep_demo下載並解壓到訂閱用戶端。
根據實際情況修改工具包中的設定檔config,設定如下參數。
表 1. 必填參數說明 參數
說明
擷取方式
brokerUrl
資料訂閱通道的網路地址及連接埠號碼資訊。
說明如果您部署SDK用戶端所屬的ECS執行個體與資料訂閱通道屬於同一專用網路,建議通過內網地址進行資料訂閱,網路延遲最小。
在DTS控制台單擊目標訂閱執行個體ID,在基本資料頁面的網路地區,您可以擷取網路地址及連接埠號碼資訊。
topic
資料訂閱通道的訂閱Topic。
在DTS控制台單擊目標訂閱執行個體ID,在基本資料頁面的基本資料地區,您可以擷取到訂閱Topic。
sid
消費組ID。
在DTS控制台單擊目標訂閱執行個體ID,然後在左側單擊數據消費頁簽,您可以擷取到消費組ID和消費組的帳號資訊。
說明消費組帳號的密碼已在您建立消費組時指定。
userName
消費組的帳號。
警告如您未使用本文提供的用戶端,請按照
<消費組的帳號>-<消費組ID>
的格式設定使用者名稱(例如:dtstest-dtsae******bpv
),否則無法正常串連。password
該帳號的密碼。
initCheckpoint
消費位點,即SDK用戶端消費第一條資料的時間戳記,格式為Unix時間戳記,例如1620962769。
重要本參數僅當subscribeMode為ASSIGN,且isForceUseInitCheckpoint為true時生效。
消費位點資訊可用於:
當業務程式中斷後,傳入已消費位點繼續消費資料,防止資料丟失。
在訂閱用戶端啟動時,傳入所需的消費位點,調整訂閱位點,實現按需消費資料。
在DTS控制台的數據訂閱頁簽,查看目標執行個體的數據範圍。消費位點必須在訂閱執行個體的資料範圍之內,並需轉化為Unix時間戳記。
說明Unix時間戳記轉換工具可用搜尋引擎擷取。
subscribeMode
SDK用戶端的使用模式,取值為
ASSIGN:ASSIGN模式,即一個消費組下僅支援一個SDK用戶端消費訂閱資料。
SUBSCRIBE:SUBSCRIBE模式,即支援在同一個消費組下同時啟動多個SDK用戶端實現災備。
無
isForceUseInitCheckpoint
是否強制使用填入的位點進行訂閱資料,取值為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)
DProxy地址填寫錯誤,導致無法串連。
config設定檔填入正確的
brokerUrl
。telnet real node xxx failed, please check the network
訂閱任務與broker地址通訊異常,導致無法串連。
config設定檔填入正確的
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,則說明是用戶端消費訂閱資料緩慢。