从数据库导出数据CDC的几种方式

变更数据捕获是一个从数据库获取数据的过程,用于复制针对操作数据库执行的操作,以供下游应用程序使用。

CDC可用于将针对源数据库执行的事务移动到目标数据库。实时CDC在此非常有价值,因为它可以实现零停机源数据库复制和迁移。例如,在将为关键应用程序提供服务的内部数据库迁移到云时,它被广泛使用,因为这些应用程序一刻也不能停机。

移动数据也有两种模式:

  • 在 ETL 的情况下,可以对 CDC 提取的数据进行即时转换,并最终推送到数据湖或数据仓库。
  • 在 ELT 的情况下,数据按原样复制到数据湖或数据仓库,并在系统内部进行转换。

CDC的主要方式:
1、轮询CDC
客户端查询源数据库并将数据推送到目标数据库。

  • 缺点 1:需要扩充所有源表,以包含记录已更改的指示器。
  • 缺点 2:通常不是实时 CDC,可能每小时、每天执行一次。
  • 缺点 3:执行 CDC 时,源数据库会承受高负载。
  • 缺点 4:复制删除事件极具挑战性。

2、推送CDC
触发器在源数据库中设置。每当数据库中发生变化事件时,就会将其推送到目标系统。

  • 缺点 1:这种方法通常会造成最高的数据库负载开销。
  • 优点 1:实时 CDC。

上述两种CDC如下图中上半部,可以使用基于Kafka等消息队列实现:


3、基于日志的CDC
上图中下半部是关于基于日志CDC:
事务型数据库将针对数据库执行的所有事件记录在事务日志中,以便恢复。 事务挖掘器安装在日志之上,并将选定的事件推送到下游系统中。流行的实现方式是 Debezium。

  • 缺点 1:设置较为复杂。
  • 缺点 2:并非所有数据库都有开源连接器。
  • 优点 1:数据库负载最小。
  • 优点 2:实时 CDC。