OceanBase 数据迁移同步优化(一)
· 阅读需 6 分钟
简述
CloudCanal 去年支持 OceanBase 数据迁移同步能力后,随着使用用户增多以及问题反馈,近期对该能力进行了一轮较大规模的优化。
本篇文章简要介绍这些优化点,以及未来该能力的演进方向。
优化点
大幅提升同步性能
CloudCanal 目前使用 OceanBase LogProxy 做增量数据订阅,使用方式相对简单明了。
@Override
public void notify(LogMessage message) {
try {
ParsedEntry entry = msgConvertor.convertMsgToEntry(message);
if (entry == null) {
return;
}
instance.getEventStore().put(entry);
} catch (Exception e) {
String msg = "parse ob msg failed.msg:" + ExceptionUtils.getRootCauseMessage(e);
log.error(msg, e);
throw new LogProxyClientException(ErrorCode.E_PARSE, msg);
}
}
消息解析对性能影响相对小,攒批 和 对端写入方式 影响更大。
攒批方面,我们将变更事件写入内存队列后,按照 个数/容量阈值(increBatchSize) 或 超时时间(fetchFromBrokerTimeoutMs) 刷出,提升批量写入的粒度。
对端写入方式,根据不同数据源,我们采用了 batch 、multisql 、 并行 、 upsert 等技术提升写入效率。
