MongoDB CDC 的设计与实现

介绍

全增量一体化读取:MongoDB CDC能够一体化地读取全量数据和增量数据。在启动选项配置为initial模式时,CDC会首先对目标集合进行扫描,并对现存的每一条数据各发送一条Insert记录;快照完成后,CDC会自动转换为增量模式,开始捕获连接器启动后到来的变更数据。

支持多种消费模式:MongoDB CDC可以设定为从以下模式中启动:latest模式、initial模式和timestamp模式。

支持产生完整变更事件流:MongoDB 6.0的Pre- and Post-Image新功能提供了一个更高效的解决方案:只要启用changeStreamPreAndPostImages功能,MongoDB就会在每次变更发生时,在一个特殊的集合中记录文档变更前后的完整状态。MongoDB CDC支持读取这些记录并产生完整事件流。

基于心跳的标记推动机制:MongoDB提供了解决这一问题的“心跳机制”选项,在流中没有变更数据时,也可以通过发送心跳包以刷新回溯标记。这样对于变更缓慢的集合也能保持其回溯标记更新,而不至于过期。

MongoDB CDC的设计方案:根据使用的技术方法不同,MongoDB CDC的技术演进过程大致分为三个阶段:最早的CDC(如早期的Debezium MongoDB等)基于查询OpLog日志集合实现,主要面向MongoDB的早期版本;第二阶段升级到了基于MongoDB 3.6提供的Change Stream API设计;在第三阶段,也就是最新的版本中,Flink CDC社区实现了基于FLIP-27和增量快照算法的设计。


推荐文章:

https://mp.weixin.qq.com/s/Ls0kv6hPuiruU18W8y9o_g

请使用浏览器的分享功能分享到微信等