我看Flink CDC debezium官网介绍说,在做快照时,只锁一会表,但是为什么flinkcdc2.3同步sql server库时,在做快照的整个过程都会锁表呢。是机制不一样吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
Debezium和Flink CDC在处理快照时的机制确实有所不同。
Debezium在创建快照时会锁定表,以防止在创建快照期间有其他事务修改表。这是通过在创建快照之前提交一个预写事务来实现的,该事务会锁定表并插入一个特殊的快照标记。然后,Debezium会在快照标记上等待,直到所有其他事务都完成并提交。最后,Debezium会提交自己的事务,解锁表,并继续处理其他事务。
相比之下,Flink CDC在创建快照时并不会锁定表。相反,它会读取所有的binlog事件,并在内存中构建一张完整的表快照。然后,它会丢弃所有的后续binlog事件,直到下一次快照被创建。这种方法的优点是不会阻塞其他事务,但是它需要更多的内存来存储快照,并且在创建快照时需要处理更多的binlog事件。
所以,虽然两者都可以创建快照,但是它们的实现方式和性能特性是不同的。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。