在 Apache Doris 1.2 版本之前,Schema Change 操作比较繁琐,需要手动增改数据列。在上游 TP 数据库发生表结构变更时,需要暂停数据同步任务、待 Doris 中的 Schema Change 完成后再重启任务。
自 Apache Doris 1.2 版本起,我们引入了轻量级的 Light Schema Change 机制,极大地简化了操作流程,常见的增减列场景其处理速度可达毫秒级。Light Schema Change 机制原理如下:
Schema Change:
客户端向 FE 发起增减列的请求;
FE 在接收到请求后,修改当前元数据,并将最新的 Schema 持久化;
FE 向客户端同步 Schema Change 的结果;
Data Load:
当后续导入任务发起时,FE 将导入任务与最新的 Schema 信息发送给 BE;
在数据写入过程中,BE 的每个 Rowset 都会存储当前导入的 Schema 信息;
Query:
FE 将查询计划与最新的 Schema 一起发送给 BE;
BE 使用最新 Schema 执行查询计划;
Compaction:
在 BE 中,对参与合并的 Rowset 版本进行比较;
根据最新的 Schema Change 信息进行数据合并。
经测试,与早期的 Schema Change 相比,Light Schema Change 的数据同步性能有了数百倍的提升,
Light Schema Change 与 Flink-Doris-Connector 的结合,通过 Flink CDC 可以实现 DDL 的自动同步,具体步骤如下:
Source 端捕获上游 Schema Change 信息,开启 DDL 变更同步;
Doris Sink 端识别并解析 DDL 操作(加减列);
Table 校验,判断是否可以进行 Light Schema Change;
发起 Schema Change 操作;
基于这一实现,Doris 能自动获取到 DDL 语句并在毫秒级即可完成 Schema Change 操作,在上游 TP 数据库发生表结构变更时,数据同步任务无需暂停。