查看组件日志

在数据同步过程中,数据延迟往往是我们很关心的业务指标。DP本版本会先设计数据的埋点,然后在后续版本中考虑如何较好的呈现和展现,因此本版本提供可以Sinkdp这个组件的日志去查询数据的几个关键时间点。

由于DP在向目的地提交数据的时候,是按照批次提交的,因此目前会以批次为粒度统计。

您可以进入到DP的Sinkdp的系统组件中,抓取想要查询的任务信息

cat d856db93ade5.log* | grep Processed | grep dptask_51
///////
其中d856db93ade5 为组件的id
dptask_51 为要抓取的任务id

然后会返回给您数据同步过程中,每个批次的数据的延迟数据。形式如下:

5000 records of [schema='dp_stag', name='6_2_4'] in 5 ms. index: 20664, size: 5000, offset: 26567.Average speed: 1 records/s.
 Batch_Encapsulation_time:15s ,////新增日志内容:为该批次的数据的封装时间
 Batch_Submit_Time:2021-06-08 T17:09:53:1231Z[Etc/UTC],/////为该批次的数据的提交时间,时间为系统时间
 Batch_Ack_Time:2021-06-8T17:39:02.949Z[Etc/UTC],/////为该批次的数据的提交后收到目的地的ACK时间,时间为系统时间,ACK可能是确认成功也可能是失败的时间
 Batch_obtain_Time_earlist: 2021-06-08 T17:04:53:1231Z[Etc/UTC],  ////为该批次所有数据中,采集的最早时间,即进入到DP系统的时间
 Batch_obtain_Time_latest: 20210608 T17:05:53:1231Z[Etc/UTC], ////为该批次所有数据中,采集的最晚时间
 Batch_produce_Time_earlist: 20210608 T17:02:53:1231 Z[Etc/UTC],  ////为该批次所有数据中,日志中的生产的最早时间
 Batch_produce_Time_latest: 20210608 T17:03:53:1231Z[Etc/UTC].  ////为该批次所有数据中,日志中的生产的最晚时间
 dptask_22 [pool-20923-thread-1][Monitor.java:130
 
 //////通过ACK时间减去日志的生产实际,计算出的是端到端的延迟
 //////通过提交时间减去进入DP系统的采集时间,计算的是DP系统同步的延迟

如果您希望通过传到目的地的数据,然后定位该数据的延迟。首先DP会提供一个Jar包,在DP的运行服务器上运行该Jar包。运行后,会提示用户输入一些相关的参数,执行即可返回四个时间。

1 需要输入的参数:任务的ID ,表名, 任意键,任意键的value,日志的存储路径,查询时间范围的起点(其中这个时间,不需要很精确,是用来确定一个搜索的时间范围的,加快检索的效率。通常情况下设置的比到达目的地的时间提前一些即可),configpath(非必填)需要一次性的输入回车即可。

如下图所示:

Jar包运行界面

输入后会返回4个时间:

返回时间界面

数据存储时间:指的是源端的数据存入源端数据库的时间,如果采集方式不支持获取,则等同于数据采集时间

数据采集时间:进入到DP系统的时间

批次提交时间:当攒好一个batch后,向目的地提交SQL的时间

批次Ack时间:当这个批次向目的地整体提交后,收到返回ack的时间,如果全部提交成功,则返回ack的时间为commit的时间,如果有一条提交失败,则会依赖于目标数据库的特性,如果目标数据库支持事务,并且DP采用以事务的方式提交,则某一条失败,会导致整个batch回滚,则返回ack的时间为回滚时间,从而保证数据的一致性,下次再执行的时候,仍然从这个失败的时间的batch开始执行。如果目标数据库不支持回滚,或者即使是支持回滚,但是DP未采用事务的方式提交,则会失败的时候,返回ack的时间。但是目标数据库会写入已经写入成功的数据,失败后的数据如果没有错误队列的规则,则不会写入。并且界面上的数据更新不会统计本批次写入成功的数据。

查询日志的起始时间戳,不要超过创建任务的时间过长,否则会影响查询效率

最后更新于

这有帮助吗?