探讨一下,如何用开源替代Oracle Goldengate - 墨天轮
大家好,今天我们要来探讨一下如何用开源替代Oracle Goldengate软件。因为ogg是商业软件。所以我们要想办法在今后的运维中进行开源替换。
debezium
比较有名的就是debezium,它是一个开源项目,为捕获数据更改(change data capture,CDC)提供了一个低延迟的流式处理平台。
它的架构如图所示,它通过kafka connect将变更后的数据传入kafka,然后在给下游的消费者使用。
从它的兼容矩阵上可以看到,当前1.5稳定版是支持12c和19c数据库的。
那么我们来看看,它是通过什么方式来获取Oracle的变更数据的。
通过官方文档的资料,我们可以发现它当前有两种模式。一种是通过本机的Oracle LogMiner来实现(免费 API),另外一个是通过Oracle Xstream的来实现,使用 XStream API,您需要拥有 GoldenGate 产品的许可证(尽管不需要安装 GoldenGate)。也就是说想要绕开Oracle GoldenGate,就只能使用Oracle自带的LogMiner。
但是LogMiner又牵扯到另外一个有意思历史问题。我们来了解一下。
引起这个问题的特性叫 Continuous Mining。
Oracle最初创建Logminer目的是使用该工具手动做一些逻辑恢复,比如开发做了一个误操作删了一条数据,就可以通过Logminer挖掘回来。同时也可以帮助进行取证分析,比如有人干坏事拒不承认,也是可以找到证据的。
这个免费API设计初衷并不是为了大型的变更而构建的,LogMiner在任何给定时间最多消耗1个CPU。由于 CPU 限制,LogMiner每秒无法处理超过10,000次以上的更改,当然这个数字也会随着更改大小的增加而减小。此外可能还会出现网络故障或者延迟的情况,如果系统无法从中断中迅速的恢复,LogMiner将持续的滞后。在每秒处理 50,000-60,000 次更改的系统中,LogMiner 永远跟不上数据更新的速度。
为了简单连续的流式更改,而不必总停止和启动LogMiner读取每个重做日志文件,Oracle在Logminer中开发了 Continuous Mining(连续挖掘)的功能。有了这个选项就可以订阅Logminer事件流,并在数据库发生更改时收到通知。但是这个情况在2019年1月Oracle 推出19c发生了改变,Oracle宣布不再支持continuous_mine选项,连续挖掘的遭到弃用然后变为不支持状态。
我们来看一下debezium讨论组对这个问题的探讨,从基本回答来看, log.mining.continuous.mine控制是否使用连续挖掘,默认不使用。
不过大佬们说了可以不依赖于连续挖掘的功能,能够在19c上正常的工作。所以说如果我们使用debezium应该是没有问题的。
yugong
第二个我们想到的工具是yugong,之前我们从Oracle迁移到MySQL就用到这个工具,写这个工具的人真的是一个大神,它完美的使用了另外一个解决办法,而且这个解决办法在我看来还有一些黑科技。
先来看它的工作原理,它使用的是物化视图日志。
物化视图日志有一个 黑科技,今天我要隆重推荐一下。
物化视图的快速刷新,是可以将语句合并的,比如insert和update它可以合并成一个merge,所以它比ogg这类软件要快。其实像割接这样的工作,本质上我们不需要管它的过程,我们只需要管最终结果一致就行了。
其他
当然网上还有一些技术方案,例如 symmetricds,它是基于触发器的方案,也是开源的。
Flink CDC暂时还不支持Oracle数据库,它也使用了debezium。袋鼠云开源了一个flinkx,基于logminer的,但缺点是不支持RAC,不过相信未来的版本会支持的。