目前已经接触到了包括 CDC/ts/snapshot 等方案实现的增量同步的功能

CDC

image.png

flink-cdc来说,其核心在于 数据库产生的 操作log,比如mysqlbinlog,flink-cdc可以采用 stream模式进行持续的数据采集, 根据log进行区分,实现几乎无延迟的数据变更捕获. 缺点是需要相关数据库的配合.

下图是基于canal的常见的数据采集方案(我认为flink-cdc更简洁)

image.png

ts

ts方案可以做到和数据库无关,需要在表中添加 ts字段,新增/修改(逻辑删除)数据时根据ts的改变进行数据捕获, 该方案更适合批处理,t+1 缺点: 流处理的成本过高,数据库压力过大

snapshot

快照存储实际上并不局限于db, 假如我们需要对一个第三方接口进行数据变更捕获的时候,显然快照是一个不错的方案. snapshot的方案更加灵活多变,需要根据不同的source进行处理优化.

pg做 snapshot来讲,我们可以利用 except实现快照diff,进行数据变更捕获. 当然也可以考虑使用 时序数据库存储快照