排查订阅任务问题

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文介绍如何在订阅客户端使用DTS定制工具包排查新版订阅任务问题。

背景信息

由于订阅任务没有使用SDK进行消费订阅数据、对SDK进行过较多修改以及订阅客户端运行环境的不同,导致排查订阅任务问题比较困难。在此提供一个工具包,在客户端的环境执行后可以协助定位和排除DTS的问题。

重要

使用该工具包会更新控制台上指定订阅组的消费位点信息,SUBSCRIBE模式依赖的服务端记录的消费位点信息不会更新。

前提条件

订阅客户端已安装Java环境,建议安装JDK 1.8及以上版本。

操作步骤

  1. 将工具包dts_subscribe_sdk_dep_demo下载并解压到订阅客户端。

  2. 根据实际情况修改工具包中的配置文件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。

    重要
    • 本参数仅当subscribeModeASSIGN,且isForceUseInitCheckpointtrue时生效。

    • 消费位点信息可用于:

      • 当业务程序中断后,传入已消费位点继续消费数据,防止数据丢失。

      • 在订阅客户端启动时,传入所需的消费位点,调整订阅位点,实现按需消费数据。

    在DTS控制台的数据订阅页签,查看目标实例的数据范围。消费位点必须在订阅实例的数据范围之内,并需转化为Unix时间戳。

    说明

    Unix时间戳转换工具可用搜索引擎获取。

    subscribeMode

    SDK客户端的使用模式,取值为

    • ASSIGN:ASSIGN模式,即一个消费组下仅支持一个SDK客户端消费订阅数据。

    • SUBSCRIBE:SUBSCRIBE模式,即支持在同一个消费组下同时启动多个SDK客户端实现灾备。

    isForceUseInitCheckpoint

    是否强制使用填入的位点进行订阅数据,取值为truefalse

  3. 将配置文件config复制到与工具包相同的路径下。

  4. 在工具包路径中运行如下命令。

    java -jar dts_subscribe_sdk_dep_demo-1.0-SNAPSHOT-jar-with-dependencies.jar config

  5. 在命令运行路径中查看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配置文件填入正确的userNamepassword

    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,则说明是客户端消费订阅数据缓慢。