人大金仓KFS实时同步能力介绍之Extractor模块

KFS实时同步能力介绍之Extractor模块

关键字:

Kingbase FlySync、Extractor、数据抽取

关于KFS的Extractor模块?

Extractor翻译为“提取器”,在KFS产品中属于replicator组件下的一级模块,同步程序中重要的组成模块,负责同步程序的“抽取-转换-加载”环节中的抽取环节。Extractor主要通过解析源端数据库的日志实现数据的抽取,将从源端数据库抽取的DDL和DML语句以统一的格式存储在kufl中,供目标端数据库解析并同步数据。此外Extractor还提供断点续传和原始过滤等功能,可以允许用户从指定的断点进行数据的增量抽取,并且可以从日志层面对数据库数据进行原始过滤,根据用户需求精简数据量,减轻后续过滤压力,增加执行执行效率。

Extractor模块在整个KFS系统中的位置

Extractor模块属于KFS系统中的核心模块,其位置如下图所示,在系统中属于低扇入高扇出的模块,被pipeline的子模块stage直接调用,同时它可以调用datasource、event、database、dbms、cache、plugin和utils这7个外部模块,这种调用关系使得Extractor具有高内聚的特点,对外暴露的接口少,修改影响小。

Extractor模块中的关键概念

  • Storage——翻译为“存储”,在KFS中有三个状态可以可以统称为Storage阶段,分别为:暂存在内存当中的中间状态事务的内存队列、用来存储最终状态事务的KUFL文件和外部数据库对象。
  • Extract——表示程序从上述Storage中抽取一条数的抽象过程。
  • Apply——Extract过程的反过程,表示将一条数据写入Storage的一个抽象过程。
  • Stage——翻译为“阶段,在KFS进行数据同步时,是个由Extract,Filter,Apply所组成的一个线程模块的统称。
  • DBMSEvent——在KFS进行数据同步时,作为一个在工作流水线上的数据结构,是对数据库事务的拆分,或单独一个DBMSEvent就对应着一个数据事务。

Extractor模块内部结构

从源码角度分析,Extractor模块对应代码中的Extractor包,其UML包图如下,extractor包内包含5个子包和3个同级的类。其中,Extractor是该模块定义的顶层接口,其他所有的extractor都是对他的直接或者间接的继承,ExtractorWrapper是对Extractor的直接实现,是对Extractor进行装饰,在Extractor接口基础上增加了configure、prepare等对外接口,ExtractorException是该模块定义的对外统一抛出的异常类。此外,其他5个子包分别对应Kingbase、mssql、mysql、oracle和postgresql五种数据源的extract行为的实现。

、关键技术extract的实现——以oracle为例

  • Oracle为用户提供了对外的接口---Logminer,Logminer中以特定的格式记录了数据库对数据进行操作的日志,包括数据的增删以及事务等信息,开发人员可以通过Logminer来获取指定范围内的增量数据。Logminer中提供的内容主要有如下六种:

(1)SCN:日志序列号

(2)SQL_REDO:具体的增量SQL语句

(3)TIMESTAMP:数据产生的时间

(4)TABLE_NAME:表名

(5)OPERATION_CODE:操作类型

(6)XID:事务日志号

  • 源端多个事务并行插入时,会产生事务混合情况,如A事务先开始,随后B事务开始,此时A、B两个事务同时执行,B事务执行结束后早与A事务提交。对于这种交叉事务的处理原理为,日志自上向下解析过程中,在读到事务BEGIN语句时,将该事务的XID作为key存储在Map结构中,同时后续的Insert语句也都存储在里面,当读到COMMIT时,将对应的Map中的数据取出,组合为一个完整的事务,通过这种方式,可以将每个事务执行过程隔离开来,从而解决多个事务并行插入的数据安全性问题。
  • Oracle数据库提供的Logminer接口已经将事务翻译成程序友好的SQL语句,因此在数据抽取过程中,主要是采用是Druid SQL Parser将SQL语句解析并存储在KUFL结构体中即可在数据同步工作流中进行传输。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值