关键字:
KingbaseFlySync、KFS、同步程序、replicator、高可用、断点续传、KUFL
1.名称解释
KUFL:KingbaseFlySync以统一的数据存储格式存放数据操作信息的中间文件 KDTS:金仓数据传输服务(Kingbase Data Transformation Service) oldestLSN:表示KFS上次解析源端数据时未提交事务的最开始位置 commitLSN:表示KFS上次解析源端数据时已提交事务的最新位置
2.功能描述
KingbaseFlySync从源端数据库解析数据过程中,不可避免的会因为某些异常而停止解析(如服务器掉电、数据库异常、网络异常等)。针对这样的异常场景,KingbaseFlySync提供断点续传的功能,可以从特定断点处继续解析,从而保证KFS不重复解析数据、不漏解析数据,从而保证源端数据库和目标端数据库的数据一致性。
3.断点续传原理简介
KingbaseFlySync在解析数据时,会在KUFL和中间表中记录oldestLSN、commitLSN,并以此来保证KFS从异常中恢复后数据的完整性。
3.1断点记录规则
如上图,假设当前的oldestLSN是1:
当事务3读取完后,commitLSN则为5,此时KFS记录断点信息则为1:5;
事务4读取完后断点信息更新为1:6;
当事务1读取完后,oldestLSN向后浮动,所以此时断点信息为2:7。
3.2断点续传规则
源端解析时
源端服务器修复并重启KingbaseFlySync后,KFS会优先从KUFL中获取断点信息(如果KUFL为空,则从KFS的中间表中获取断点信息),然后从源端数据库的指定断点继续进行解析。
从KUFL获取断点信息:
- 从中间表获取心跳信息:
- 目标端从源端获取KUFL时 目标端服务器修复并重启KingbaseFlySync后,KFS会优先从KUFL中获取断点信息,再定位到需要继续拉取的KUFL的seqno,然后从指定的seqno开始、从源端拉取KUFL到本地。
- 目标端入库时
目标端服务器修复并重启KingbaseFlySync后,KFS会从中间表获取到已经入库完成的KUFL的seqno,然后从下一个seqno开始继续入库。
4.从指定断点解析
KingbaseFlySync还支持从指定断点解析,主要应用场景包括:
- KFS初始化:KFS初始化时,可以设置开始解析的断点
- 不停机迁移场景:通常是使用KDTS或其它的方式从指定断点处将存量数据整体搬迁到目标端,然后使用KFS从指定断点处同步搬迁过程中增加的数据
具体效果如图:
初始化解析的数据:
重置后从指定断点解析的数据: