当数据量大时,数据被频繁变更时偶发出现数据错误
com.starrocks.data.load.stream.DefaultStreamLoader#send 函数异步操作
public Future<StreamLoadResponse> send(TableRegion region, int delayMs) {
if (!this.start.get()) {
log.warn("Stream load not start");
}
if (this.begin(region)) {
return this.executorService.schedule(() -> this.sendToSR(region), (long)delayMs, TimeUnit.MILLISECONDS);
} else {
region.fail(new StreamLoadFailException("Transaction start failed, db : " + region.getDatabase()));
return null;
}
}
导致写入到Starrocks中时没有保证顺序,出现先发生的事件覆盖了后发生的事件,最终导致SR中数据不一致
例如 有一条记录 R ,在时间1 修改了name为Z3,在时间2修改为L4,但是SR一侧写入时先接收到了L4的记录,最终该记录表现为Z3,不符合实际(修改为L4的Chunk先被执行)