文章目录
CDC,Change Data Capture 变更数据捕获
目前CDC有两种实现方式,一种是主动查询、一种是事件接收。
主动查询:
相关开源产品有Sqoop、Kafka JDBC Source等。
用户通常会在数据原表中的某个字段中,保存上次更新的时间戳或版本号等信息,然后下游通过不断的查询和上次的记录做对比,来确定数据是否有变动,是否需要同步变化数据。
因为要以一定的间隔不断的查询源数据库,所以随着间隔的减小和扫描数据量的增加对源数据库的压力会随之增加。
优点1:不涉及数据库底层特性,比较通用;
缺点1:如果原表中的字段无法用来区分新旧数据,那么需要对原表进行改造,从这一点看在某些场景下,可能无法使用该方式。
缺点2:实时性不高。
缺点3:对业务数据库有压力。
缺点4:源数据库数据更新频繁时,可能存在数据丢失的风险。
事件接收:
相关开源产品有Canal、Maxwell、Debezium等。
通过数据库本身的触发器(Trigger)或者日志(例如Binary log、Transaction log、Write-ahead log等)媒介将数据变化记录下来,外部系统通过数据库底层的协议,订阅并消费这些事件,然后对数据库变动记录做重放,从而实现数据同步。
优点1:实时性高,可以精确捕获数据变化。
优点2:对源数据库不会产生额外压力。
缺点1:需要独立安装部署插件或服务,比Debezium 采集 MySql数据时。
缺点2:需要将采集到的数据额外存储到Kafka等外部组件中对外提供稳定的实时数据流。
缺点3:支持的数据库种类少。
Flink cdc 通过嵌入Debezium、Kafka的方式实现CDC,降低了实现源数据库数据实时同步到Flink的操作难度。如下图红色虚线部分,就是被简化的内容。
这里以flink-connector-postgresql-cdc依赖进行分析
从中可以看到debezium和kafka的相关依赖。
随后再更新(ง •_•)ง
参考资料:
https://www.jianshu.com/p/616d6c5f23a0
https://blog.csdn.net/qq_32727095/article/details/120361815