问题描述
在客户现场运维过程中,使用datax同步数据从hdfs到drds速度极其缓慢,因此希望进行datax的json文件进行优化,提升速度,同步缓慢及报错如下;
问题分析
对于datax的使用问题,第一要素就要检查json文件的问题;
从同步的datax的日志及报错的tddl-4603来看,json文件是可以使用的,只是使用的参数设置有问题导致了4603的报错,也就是出现了跨库事务的存在;drds使用datax从hdfs同步数据过来,解析之后应该直接进入到对应的分库分表当中,为何会出现这种报错?
检查json文件,我们发现如下:
这里的drds导入的writer引擎竟然是mysqlwriter而非drdswriter引擎,经过咨询师兄,mysqlwriter不能用在drds目标的,否则就会出现跨库事物不支持;
由于drds本身是出现是有适用datax的drdswriter的引擎,所以修改引擎为drdswriter以后,重新执行datax同步任务,发现tddl-4603报错消失,同步速度从38k提升到200k;
而此时200k速度,3000多行的导入速率依然太慢无法满足客户的需求;
故而还需继续分析优化其他参数来进行速度的提升;
这里涉及到的最直接的优化参数就是speed参数;
speed参数在这个场景有两种模式:
aã channel模式:是并行的一个设置,设置并行切分任务数;
bã bytes模式:限制单个任务速度上线;
而目前是由于速度根本上不去,并且测试了bytes以后根本不起作用,所以依旧选择使用channel;
对于数据writeMode写入模式,由于数据准备已经确定没有问题,没有必要进行导入校验,可以选择导入以后校验,故而用insert ignore替换了replace,并且添加了batchsize的缓冲大小再次进行测试
如下为修改后的json文件模式;
再次测试的结果如下:
速度从原来的200k提升到了1.7M,满足客户需求;
然后针对目前的情况略作微调进行压测如下:
问题解决及建议
1、调整写入引擎从mysqlwriter到drdswriter引擎,避免夸库事务的存在;
2、调整writeMode写入模式从replace为insert ignore选择不进行数据检查模块,并增加batchsize参数,速度提升满足客户需求;
3、在此基础上进行微调,添加数据源参数及调整channel及batchsize等,得到最后参数设置及速度情况;