暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

人大金仓KFS增量解析原理-Logminer

KFS补给站 2023-10-27
263


关键字:

KFS,增量解析,Oracle,Logminer

概述

KFS源端的工作流分为两个阶段:binlog-to-q和q-to-kufl。binlog-to-q阶段,KFS从源端的数据库日志中抽取增量数据,经过extractor模块解析封装后,以DBMSEvent的形式在内存队列queue中暂存,此阶段的主要工作是将数据库的元组信息抽取转化为DBMSEvent,我们称此阶段为“解析”阶段。对于不同的数据库,我们增量抽取解析方式不同,Oracle提供了一个对外接口-Logminer,用户可以使用该接口来获取指定范围内的增量数据,本来将简要介绍KFS通过Logminer获取Oracle的增量数据。

增量解析

增量抽取与解析是KFS进行数据同步所要进行的第一个动作,抽取解析过程因为数据源的不同会导致实现方式的不同,目前KFS支持抽取众多源日志,例如Oracle的Redo、MySQL的Binlog、KES V8的WAL、SQL Server的WAL,对于不同的数据库,我们增量抽取解析方式不同,

Logminer

对于Oracle数据库,所有对用户数据和数据字典的改变都记录在Oracle的Redo Log中,因此,Redo Log包含了所有进行恢复操作所需要的信息。但是原始Redo Log文件不易于阅读,因此,Oracle从8i开始提供了一个分析工具-Logminer,使用该工具可以获取Redo Log文件中的具体内容,KFS实现了通过Logminer获取Oracle的增量数据。

KFS增量解析流程-Logminer

KFS通过Logminer获取Oracle增量数据时的运行线程共有3个,如图所示

2021-05-21_163424

三个线程,分别是OracleLogminerReaderExtractor、OracleLogminerReaderThread、OracleLogminerParserThread,OracleLogminerReaderExtractor线程启动后,它会判断OracleLogminerReaderThread线程的状态,如果未启动,则将其启动;OracleLogminerReaderThread线程会判断OracleLogminerParserThread线程的状态,如果未启动,则将其启动,OracleLogmienrReaderThread会启动Logminer,不断查询Oracle的变更记录并将SQL放入ReaderThread和ParserThread的通信队列中;OracleLogminerParserThread会不断从SQL队列中取出具体的对象进行解析,解析后封装为DBMSEvent(在KFS流水线中流转的一种数据结构)并放入ReaderExactor和ParserThread的通信队列中,ReaderExactor从队列中取出对象后,进行下一阶段的操作。

最后修改时间:2023-11-02 18:15:40
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论