searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

数据库变更数据捕获(CDC)技术

2024-06-21 09:38:29
73
0

CDC的定义

变更数据捕获(Change Data Capture)是一种数据处理模式,专注于识别并记录数据库中数据的增删改操作。它通过监控数据库日志或其他机制,捕捉到数据的每一次变化,然后将这些变化以结构化的方式提供给下游系统,如数据仓库、消息队列、流处理引擎等,实现数据的实时同步和分析。

为什么需要CDC?

  • 实时性:传统ETL(Extract, Transform, Load)过程往往以批处理方式进行,无法满足实时数据分析的需求。CDC能够近乎实时地传递数据变更,加速业务决策。
  • 效率提升:仅传输变更数据而非全量数据,极大减少了数据传输量和处理时间,提高了数据集成的效率
  • 数据一致性:确保源系统和目标系统之间数据的一致性,特别是在分布式系统和微服务架构中尤为重要。
  • 审计与合规:便于跟踪数据变更历史,满足合规性和审计要求。

 

CDC的实现方式

1、基于日志的CDC

基于日志的CDC,又可以分为两种:

  • 基于复制日志

复制日志主要用于主从复制,也可以用于恢复数据。复制日志里记录了变更的数据,包括DML和DDL数据,每条变更数据都有对应的位点信息。典型的应用包括canal解析MySQL的binlog日志、Debezium解析MongoDB的oplog日志来获取增量数据。

  • 基于WAL日志或REDO LOG

WAL日志或REDO LOG在确保数据的持久性和一致性的过程中扮演着至关重要的角色。PostgreSQL的WAL(Write-Ahead Log)、Oracle的Redo Log等,这些日志原本设计用于事务恢复和复制,但也可以被第三方工具解析以实现CDC。

 

一般解析该类日志,需要配置解析的插件,比如PostgreSQL的逻辑复制槽,需要安装解析插件比如pgoutput、wal2json和decoderbufs等,这些插件通过解析WAL日志,获取增量数据。又比如Oracle的LogMiner,该功能允许用户分析和检索Oracle重做日志文件,通过解析重做日志,用户可以了解到数据库中每一个DML操作的详细情况,以及DDL操作的历史记录。

 

2、基于数据库内置的CDC功能

许多数据库自身提供了CDC功能,用户可直接通过这些功能获取增量数据。

  • 通过agent程序将增量数据写到cdc表

典型的有SQL Server和DB2。当SQL Server开启CDC后,会启动SQL Server Agent服务,并在系统数据库msdb中为每个启用CDC的用户数据库创建一些元数据表和存储过程,同时在用户数据库中创建捕捉变更的表(通常命名为_CT结尾的系统表)来存储变更数据。DB2的实现也是类似,DB2启动CDC后,会启动asncap程序对增量数据进行捕获,并写到对应的表中。该类型的CDC功能只能支持增量DML数据的捕捉。

 

  • 基于数据库提供的API接口

很多数据库本身提供了CDC的API接口,用户只需要调用对应的接口,即可捕捉增量数据。如MongoDB的changestream接口、Spanner cloud提供的CDC接口等。

 

  • 基于数据库的CDC组件

CDC作为数据库的其中一个组件,比如TiDB的TiCDC、OceanBase的obcdc等,对外提供数据库实时增量数据。

 

结论

市场上有许多成熟的第三方工具和服务,如天翼云TeleDB旗下的数据传输服务DTS、Canal、Debezium、Apache Kafka Connect、Logstash、GoldenGate等,它们提供了广泛的数据库支持和灵活的集成选项,简化了CDC的实施过程,特别适合复杂的异构环境。

变更数据捕获(CDC)作为一种强大的数据同步技术,极大地提升了数据流动的实时性和效率,是构建现代数据平台不可或缺的一部分。选择合适的实现方式需考虑数据库类型、系统规模、性能要求以及维护成本等因素。随着数据集成和分析需求的不断增长,预计未来CDC技术将持续发展,提供更多创新解决方案。

0条评论
0 / 1000
廖****兴
5文章数
0粉丝数
廖****兴
5 文章 | 0 粉丝
廖****兴
5文章数
0粉丝数
廖****兴
5 文章 | 0 粉丝
原创

数据库变更数据捕获(CDC)技术

2024-06-21 09:38:29
73
0

CDC的定义

变更数据捕获(Change Data Capture)是一种数据处理模式,专注于识别并记录数据库中数据的增删改操作。它通过监控数据库日志或其他机制,捕捉到数据的每一次变化,然后将这些变化以结构化的方式提供给下游系统,如数据仓库、消息队列、流处理引擎等,实现数据的实时同步和分析。

为什么需要CDC?

  • 实时性:传统ETL(Extract, Transform, Load)过程往往以批处理方式进行,无法满足实时数据分析的需求。CDC能够近乎实时地传递数据变更,加速业务决策。
  • 效率提升:仅传输变更数据而非全量数据,极大减少了数据传输量和处理时间,提高了数据集成的效率
  • 数据一致性:确保源系统和目标系统之间数据的一致性,特别是在分布式系统和微服务架构中尤为重要。
  • 审计与合规:便于跟踪数据变更历史,满足合规性和审计要求。

 

CDC的实现方式

1、基于日志的CDC

基于日志的CDC,又可以分为两种:

  • 基于复制日志

复制日志主要用于主从复制,也可以用于恢复数据。复制日志里记录了变更的数据,包括DML和DDL数据,每条变更数据都有对应的位点信息。典型的应用包括canal解析MySQL的binlog日志、Debezium解析MongoDB的oplog日志来获取增量数据。

  • 基于WAL日志或REDO LOG

WAL日志或REDO LOG在确保数据的持久性和一致性的过程中扮演着至关重要的角色。PostgreSQL的WAL(Write-Ahead Log)、Oracle的Redo Log等,这些日志原本设计用于事务恢复和复制,但也可以被第三方工具解析以实现CDC。

 

一般解析该类日志,需要配置解析的插件,比如PostgreSQL的逻辑复制槽,需要安装解析插件比如pgoutput、wal2json和decoderbufs等,这些插件通过解析WAL日志,获取增量数据。又比如Oracle的LogMiner,该功能允许用户分析和检索Oracle重做日志文件,通过解析重做日志,用户可以了解到数据库中每一个DML操作的详细情况,以及DDL操作的历史记录。

 

2、基于数据库内置的CDC功能

许多数据库自身提供了CDC功能,用户可直接通过这些功能获取增量数据。

  • 通过agent程序将增量数据写到cdc表

典型的有SQL Server和DB2。当SQL Server开启CDC后,会启动SQL Server Agent服务,并在系统数据库msdb中为每个启用CDC的用户数据库创建一些元数据表和存储过程,同时在用户数据库中创建捕捉变更的表(通常命名为_CT结尾的系统表)来存储变更数据。DB2的实现也是类似,DB2启动CDC后,会启动asncap程序对增量数据进行捕获,并写到对应的表中。该类型的CDC功能只能支持增量DML数据的捕捉。

 

  • 基于数据库提供的API接口

很多数据库本身提供了CDC的API接口,用户只需要调用对应的接口,即可捕捉增量数据。如MongoDB的changestream接口、Spanner cloud提供的CDC接口等。

 

  • 基于数据库的CDC组件

CDC作为数据库的其中一个组件,比如TiDB的TiCDC、OceanBase的obcdc等,对外提供数据库实时增量数据。

 

结论

市场上有许多成熟的第三方工具和服务,如天翼云TeleDB旗下的数据传输服务DTS、Canal、Debezium、Apache Kafka Connect、Logstash、GoldenGate等,它们提供了广泛的数据库支持和灵活的集成选项,简化了CDC的实施过程,特别适合复杂的异构环境。

变更数据捕获(CDC)作为一种强大的数据同步技术,极大地提升了数据流动的实时性和效率,是构建现代数据平台不可或缺的一部分。选择合适的实现方式需考虑数据库类型、系统规模、性能要求以及维护成本等因素。随着数据集成和分析需求的不断增长,预计未来CDC技术将持续发展,提供更多创新解决方案。

文章来自个人专栏
jvm知识
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0