请问,flink cdc 全量同步 不加锁,如果要同步binlog之前的数据的话,是通过select 查表获取全量数据的吗?另外: 在同步全量数据的同时,如果数据库还有更新,那么是如何解决的?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Flink CDC进行全量同步时不加锁的情况下,确实是通过执行SELECT语句来获取MySQL表中的全量数据。这个过程可能会对数据库造成一定的查询压力,尤其是在处理大型表时。
关于您提到的同步全量数据的同时数据库仍有更新的情况,Flink CDC的处理方式如下:
记录Binlog位点:在全量数据抽取开始之前,Flink会记录当前的Binlog位置。这样,在全量数据抽取完成后,能够从该记录的位点开始读取增量的Binlog数据,确保不丢失在此期间数据库内的任何更新操作。
Snapshot与Stream的结合:Flink CDC的工作流程分为两个阶段——Snapshot阶段(全量数据抽取)和Stream阶段(增量数据即Binlog的读取)。在Snapshot阶段,尽管数据库可能有新的更改,但这些更改会在Stream阶段被后续的Binlog读取捕捉到,从而实现最终的数据一致性。这意味着即使在全量抽取过程中有数据变更,这些变更也会在后续的增量处理中被正确反映出来,不会导致数据不一致。
综上所述,Flink CDC通过先全量抽取再增量消费Binlog的方式,确保了在抽取全量数据的同时,数据库的实时更新能够在后续处理中被正确捕获和应用,以此达到数据的最终一致性。