Datawork-离线同步速度的影响因素

 

一、数据同步速度的影响因素

数据同步速度受来源与目标端数据库环境及同步任务配置等因素影响,其中源端和目的端数据库的性能、负载和网络情况主要由您自己关注并进行调优。

影响数据同步速度的因素如下:

因素

说明

来源端数据源

  • 数据库的性能:CPU、内存、SSD硬盘、网络和硬盘等。
  • 并发数:数据源并发数越高,数据库负载越高。通常,数据库的性能越好,它可以承载的并发数越高,您可以为数据同步作业配置越多的并发数据抽取。
  • 网络:网络的带宽(吞吐量)、网速。

离线同步任务使用的调度资源组

离线同步任务将有调度资源下发至数据集成任务执行资源上执行,调度资源使用情况同样会影响整体数据集成同步效率。关于离线任务下发机制,详情请参见:任务下发机制

离线同步任务配置

  • 传输速度:是否设置任务同步速度上限值。
  • 并发:从源并行读取或并行写入数据存储端的最大线程数。
  • WAIT资源。
  • Bytes的设置:单个线程的Bytes=1048576,在网速比较敏感时,会出现超时现象,此时建议将Bytes设置的较小。
  • 查询语句是否建索引。

目的端数据源

  • 性能:CPU、内存、SSD 硬盘、网络和硬盘。
  • 负载:目的数据库负载过高会影响同步任务数据写入效率。
  • 网络:网络的带宽(吞吐量)、网速。

 

二、提高同步速率的配置

1.切分键SplitKey

将数据表中某一列作为切分键(建议使用主键或有索引的列作为切分键),读取数据时,根据配置的字段进行数据切片,实现并发读取,可以提升数据同步速率。

SplitKey用于Reader端插件的设置,并且目前来说主要对于关系型数据库和Hbase来说。

关系型数据库

定义将源端待同步数据基于源端哪一个字段进行切分,同步任务执行时将根据该字段切分为多个task,以便并发、分批读取数据。

说明

  • 推荐splitPk用户使用表主键,因为表主键通常情况下比较均匀,因此切分出来的分片也不容易出现数据热点。
  • 目前splitPk仅支持整型数据切分,不支持字符串、浮点和日期等其他类型 。如果您指定其他非支持类型,忽略splitPk功能,使用单通道进行同步。关系型数据库通常只支持数值型作为切分键,但Oracle数据库支持以数值型和字符串类型作为切分键。
  • 如果不填写splitPk,包括不提供splitPk或者splitPk值为空,数据同步视作使用单通道同步该表数据 。
  • 并非所有插件均支持指定切分键配置任务切分逻辑。

HBase

读取表时对表进行切分,如果指定splitKey,表示您希望使用splitKey代表的字段进行数据分片,数据同步因此会启动并发任务进行数据同步,提高了数据同步的效能。您可以选择两种不同的切分方式,如果splitPoint为空,默认根据方法一自动切分:

  • 方法一:根据splitKey找到最大值和最小值,然后按照指定的concurrent数平均切分。

说明 仅支持以整型和字符串类型作为切分列。

  • 方式二:根据设置的splitPoint进行切分。然后按照指定的concurrent同步数据。

 

 

2.通道配置

(1) 任务期望最大并发数

用于定义当前任务从源端并行读取或并行写入目标端的最大线程数。

重要:由于资源规格等原因,实际执行时并发数可能小于等于此处配置的并发数。

 

(2) 同步速率

用于控制同步速率。

  • l限流:您可以通过限流控制同步速率,以保护读取端数据库,避免抽取速度过大,给源库造成太大的压力。限速最小配置为1MB/S。
  • l不限流:在不限流的情况下,任务将在所配置的并发数的限制基础上,提供现有硬件环境下最大的传输性能。

 

(3) 错误记录数控制(脏数据控制)

用于定义脏数据阈值,及对任务的影响。

1) 不配置时默认允许脏数据,即任务产生脏数据时不影响任务执行。

2) 配置为0,表示不允许脏数据存在。如果同步过程中产生脏数据,任务将失败退出。

3) 允许脏数据并设置其阈值时:

① 若产生的脏数据在阈值范围内,同步任务将忽略脏数据(即不会写入目标端),并正常执行。

② 若产生的脏数据超出阈值范围,同步任务将失败退出。

重要当脏数据过多时,会影响同步任务的整体同步速度。

 

(4) 分布式处理能力

用于控制是否开启分布式模式来执行当前任务。

  • 开启:分布式执行模式可以将您的任务切片分散到多台执行节点上并发执行,进而做到同步速度随执行集群规模做水平扩展,突破单机执行瓶颈。
  • 未开启:配置的并发数据仅仅是单机上的进程并发,无法利用多机联合计算。
  • 如果您对于同步性能有比较高的诉求可以使用分布式模式。 另外分布式模式也可以使用机器的碎片资源,对资源利用率友好。

重要

1) 如果独享资源组只有1台机器,不建议使用分布式,因为无法利用多机资源能力。

2) 如果单机已经满足速度需要,建议优选单机模式,简化任务执行模式。

3) 并发数大于等于8个才能开启分布式处理能力。

4) 部分数据源支持分布式模式执行任务。

三、慢任务原因排查

(1) 并发数设置过小,大多可能采用默认并发数2。

(2) 数据同步任务where条件没有索引,导致全表扫描同步变慢。

(3) BatchSize或maxfilesize参数控制一次性批量提交的记录数大小,该值可以减少数据同步与数据库网络交互次数,并提升吞吐量。但如果该值设置过大,会导致数据同步运行进程OOM异常。

(4) 同步过程产生大量脏数据,影响同步速度。

(5) 关系型数据库任务切分键设置不合理,导致并发设置无效,单并发同步。

(6) 写端插件中配置的前、后置语句执行慢。(例如preSql、postSql参数中配置delete删除语句等)。

(7) 离线任务调度资源组执行任务数到达上限,则需要等待资源组上执行的任务执行结束,释放资源。

(8) 前数据集成任务执行资源组剩余资源不够当前任务执行。例如,资源组最大支持8个并发同时执行,若当前存在3个并发为3的任务,其中2个任务同时执行,那么机器剩余的并发为2,此时另一个并发为3的任务将由于资源组剩余资源不够,导致当前任务进入等待状态,日志显示wait。

(9) 任务同步时间点数据库负载高。

(10) 网络问题:网络的带宽(吞吐量)、网速。

 

 

附录:并发度和资源的占用关系

在独享资源组中,占用关系包括并发度和CPU、内存的占用关系:

1.并发度和CPU的占用关系

在独享资源组中,并发度和CPU的占用关系为1:0.5,即拥有一台4 vCPU 8 GiB规格的ECS机器,其独享资源组的并发额度为8。最多能够同时运行8个并发度为1的离线同步任务,或4个并发度为2的离线同步任务。

当新提交至独享资源组的任务所需要的并发度大于独享资源组剩余的并发度额度时,新提交的任务将等待独享资源组中正在运行的任务结束,直至剩余的并发度额度满足新提交任务的并发度需求。

说明 如果新提交任务设置的并发度超过独享资源组的最大并发额度,例如,向一台拥有4 vCPU 8 GiB规格的ECS机器的独享资源组提交一个并发度设置为10的任务,该任务将永远处于等待资源的状态。由于资源组根据任务被提交的先后顺序分配资源,后续提交的任务也将无法运行。

2.并发度和内存的占用关系

在独享资源组中,单个任务的并发度和内存的占用关系为Min{768+(并发数-1)*256,8029} MB。但是,您可以在任务中通过设置,覆盖其对应关系。如果是脚本模式,请在JSON结构的配置文本中,通过JSON路径$.setting.jvmOption进行设置。

 

您需要确保所有正在运行的任务使用内存的总和,比独享资源组中所有机器的内存总量小1 GB以上,任务才能平稳运行。如果未满足该条件,会因为Linux系统的OOM Killer机制强制停止任务的运行。

 

posted @ 2023-06-15 12:00  业余砖家  阅读(163)  评论(0)    收藏  举报