前面的文章实现了直接跨库同步表,以及通过消息中间件kafka或pulsar进行异步读写库实现数据同步的方法,但都没有解决一个问题,就是程序中断后怎么从当时中断的那个时间点同步的问题。
再看一下前面的数据同步解决方案。以前的业务系统(假设为S系统)已经上线,新的业务系统或数据平台(假设为P平台)需要把数据集中抽取上来,如果用接口的方式,那么势必在S,P中新增很多接口,双方进行实时交互。这样做的缺点就是侵入式的,对于双方的业务都有强行插入,虽然能用诸如AOP来实现,但终究不完美,且不可扩展,新的业务要持续增加接口。那么我们的解决方案是使用Flink CDC与Pulsar,组建SpringBoot项目(假设为C项目),将C打包后部署到S系统所在的机器或网络侧,C与P均通过Pulsar进行交互,真正做到对业务系统S无感的非侵入式设计。
那么,回到问题,如果C一旦崩溃,数小时或数天才得以恢复,C恢复后虽然继续运行,但数小时或数天前S发生的业务,C如何才能读取呢