DataX 对于脏数据提示的改进建议

daupos2t  于 2021-11-29  发布在  Java
关注(0)|答案(3)|浏览(1995)

现在对于脏数据配置中有个maxDirtyNumber的配置进行设置,重复数据大于这个值就会报脏数据:
public void collectDirtyRecord(Record dirtyRecord, Throwable t,
String errorMessage) {
int logNum = currentLogNum.getAndIncrement();
if(logNum==0 && t!=null){
LOG.error("", t);
}
if (maxLogNum.intValue() < 0 || currentLogNum.intValue() < maxLogNum.intValue()) {
LOG.error("脏数据: \n"

  • this.formatDirty(dirtyRecord, t, errorMessage));
    }
super.collectDirtyRecord(dirtyRecord, t, errorMessage);
}

但是代码中的逻辑只是提示这是脏数据,并不会阻断传输,所以这里报error日志是会误导使用者,以为传输会失败。
其次在测试的时候经常会自己造大量重复数据,这种情况下不需要对脏数据进行提示,建议增加是否判断脏数据的开关配置。

ilmyapht

ilmyapht1#

会中断传输啊,你参数没有设置对而已~~ "setting":{"errorLimit":{"record":0},"speed":{"channel":1}} 设置成0就会中断了~

mitkmikd

mitkmikd2#

请教一下,我现在有一行脏数据,不影响业务,我想在同步的时候遇到脏数据自动跳过不要终止任务,在errorlimit设置了record:10,但是还是遇到一行就退出了,没有继续执行。请问有办法吗

jckbn6z7

jckbn6z73#

单机版的DataX,在脏数据统计上有点小问题。举个例子:你先运行了一个任务A,假设这个任务A有5条脏数据,errorlimit设置了record:0,在运行时,这个任务是一定会因为脏数据而终止执行。任务A终止执行后,你紧接着运行任务B,假设任务B没有脏数据,errorlimit也设置了record:0,但有可能任务B在运行时,它也会报“在运行的过程中捕获了5条脏数据,任务结束”。也就是任务A的脏数据会影响任务B。
而问题出在LocalTGCommunicationManager这个类中,它使用了一个静态变量taskGroupCommunicationMap来存储脏数据。

相关问题