排查訂閱任務問題
本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務造成影響,請務必仔細閱讀。
本文介紹如何在訂閱客戶端使用DTS定制工具包排查新版訂閱任務問題。
背景信息
由于訂閱任務沒有使用SDK進行消費訂閱數(shù)據(jù)、對SDK進行過較多修改以及訂閱客戶端運行環(huán)境的不同,導致排查訂閱任務問題比較困難。在此提供一個工具包,在客戶端的環(huán)境執(zhí)行后可以協(xié)助定位和排除DTS的問題。
使用該工具包會更新控制臺上指定訂閱組的消費位點信息,SUBSCRIBE模式依賴的服務端記錄的消費位點信息不會更新。
前提條件
訂閱客戶端已安裝Java環(huán)境,建議安裝JDK 1.8及以上版本。
操作步驟
將工具包dts_subscribe_sdk_dep_demo下載并解壓到訂閱客戶端。
根據(jù)實際情況修改工具包中的配置文件config,設置如下參數(shù)。
表 1. 必填參數(shù)說明 參數(shù)
說明
獲取方式
brokerUrl
數(shù)據(jù)訂閱通道的網(wǎng)絡地址及端口號信息。
說明如果您部署SDK客戶端所屬的ECS實例與數(shù)據(jù)訂閱通道屬于同一專有網(wǎng)絡,建議通過內網(wǎng)地址進行數(shù)據(jù)訂閱,網(wǎng)絡延遲最小。
在DTS控制臺單擊目標訂閱實例ID,在基本信息頁面的網(wǎng)絡區(qū)域,您可以獲取網(wǎng)絡地址及端口號信息。
topic
數(shù)據(jù)訂閱通道的訂閱Topic。
在DTS控制臺單擊目標訂閱實例ID,在基本信息頁面的基本信息區(qū)域,您可以獲取到訂閱Topic。
sid
消費組ID。
在DTS控制臺單擊目標訂閱實例ID,然后在左側單擊數(shù)據(jù)消費頁簽,您可以獲取到消費組ID和消費組的賬號信息。
說明消費組賬號的密碼已在您新建消費組時指定。
userName
消費組的賬號。
警告如您未使用本文提供的客戶端,請按照
<消費組的賬號>-<消費組ID>
的格式設置用戶名(例如:dtstest-dtsae******bpv
),否則無法正常連接。password
該賬號的密碼。
initCheckpoint
消費位點,即SDK客戶端消費第一條數(shù)據(jù)的時間戳,格式為Unix時間戳,例如1620962769。
重要本參數(shù)僅當subscribeMode為ASSIGN,且isForceUseInitCheckpoint為true時生效。
消費位點信息可用于:
當業(yè)務程序中斷后,傳入已消費位點繼續(xù)消費數(shù)據(jù),防止數(shù)據(jù)丟失。
在訂閱客戶端啟動時,傳入所需的消費位點,調整訂閱位點,實現(xiàn)按需消費數(shù)據(jù)。
在DTS控制臺的數(shù)據(jù)訂閱頁簽,查看目標實例的數(shù)據(jù)范圍。消費位點必須在訂閱實例的數(shù)據(jù)范圍之內,并需轉化為Unix時間戳。
說明Unix時間戳轉換工具可用搜索引擎獲取。
subscribeMode
SDK客戶端的使用模式,取值為
ASSIGN:ASSIGN模式,即一個消費組下僅支持一個SDK客戶端消費訂閱數(shù)據(jù)。
SUBSCRIBE:SUBSCRIBE模式,即支持在同一個消費組下同時啟動多個SDK客戶端實現(xiàn)災備。
無
isForceUseInitCheckpoint
是否強制使用填入的位點進行訂閱數(shù)據(jù),取值為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
消費位點不在規(guī)定范圍,導致無法連接。
config配置文件填入在訂閱實例的數(shù)據(jù)范圍內的消費位點參數(shù)
initCheckpoint
。說明若消息隊列參數(shù)DStoreRecordQueue和DefaultUserRecordQueue的參數(shù)值一直是0,則說明從服務端(DTS)讀取數(shù)據(jù)緩慢;若參數(shù)值一直是默認值512,則說明是客戶端消費訂閱數(shù)據(jù)緩慢。