变更数据捕获(CDC)技术

变更数据捕获(CDC)技术

一种用于捕获源数据库中数据和数据结构(也称为模式)的增量变更,并将这些变更近乎实时地传播到其他数据库或应用程序的技术。

技术开发 编程 技术框架 技术发展

 

变更数据捕获(CDC)技术

一种用于捕获源数据库中数据和数据结构(也称为模式)的增量变更,并将这些变更近乎实时地传播到其他数据库或应用程序的技术。

变更数据捕获(Change Data Capture,简称CDC)是一种用于捕获源数据库中数据和数据结构(也称为模式)的增量变更,并将这些变更近乎实时地传播到其他数据库或应用程序的技术。它在高速数据流通环境中,特别是在各种关系型数据库、云端数据库以及数据仓库之间,提供了低延迟、高可靠性且可扩展式数据复制的理想化解决方案。

CDC的主要优势在于,它仅发送增量的变更,从而降低了通过网络传输数据的成本。此外,CDC还可以帮助用户根据最新的数据做出更快、更准确的决策。

在SQL Server中,CDC的实现依赖于事务日志。当对表启用CDC时,系统会生成一个与该表结构类似的副本。当对源表进行插入、更新和删除操作时,这些操作的信息会被记录在事务日志中。CDC代理使用异步进程读取这些事务日志,并将相关操作结果应用到副本表(捕获实例表)中,从而实现了对源表操作的记录跟踪。

值得注意的是,CDC并非适用于所有情况。它仅在SQL Server的特定版本(如Enterprise Edition、Developer Edition和Evaluation Edition)中可用,并且需要SQL Agent服务的支持。此外,执行CDC的用户需要具有sysadmin角色权限。

CDC极大的提高了数据集成效率,消除了批量的高延时问题。CDC解决方案最常发生在数据仓库环境中,因为捕获和保存数据的跨时的状态是数据仓库的核心功能之一。CDC主要面向关系数据库、遗留系统、大型机以及基于文件的数据库等数据源。CDC广泛应用于数据仓库实时数据供给、实时商务智能、跨越多种异构数据库和操作系统实现实时数据同步、主数据同步、数据备份与容灾,数据库升级和移植,双业务中心等多种业务场景。

CDC平台核心组件描述如下:

  • 管理和监控(Management&Monitor),管理监控组件用于维护和配置数据捕获与分发流程

  • 捕捉 (Capture),用于访问源端数据库读取在线日志或归档日志,提取其中数据的变更如增、删、改等DML操作,以及ALTER,DROP,TRUNCATE等DDL操作

  • 解析 (Parser),用于将原始SQL语句解析成原始java对象,并表示对象的操作类型,如(INSERT/UPDATE/DELETE/ALTER…)

  • 过滤 (Filter),用于将数据合并为顺序的事务,通过系统内置过滤规则,将未提交的数据过滤,通过系统配置过滤规则,过滤大事务、长事务、提交人过滤等

  • 格式化 (Formater),用于将原始的SQL数据格式化为标准的java 统一格式对象

  • 持久化 (Persister),用于将数据存储至持久化至数据存储区

  • 任务(Job,Tipic, Scheduler),用于编排Capture、Parser、Filter、Formater、Persister等执行流程和规则,定义数据同步主题以及调度程序

  • 发布(Publisher),发布组件,用于将分析的数据发布至数据应用业务接口

  • 订阅(Subscriter),提供数据订阅接口,供数据应用业务订阅

  • 分发 (Deliver),接收格式化进程提供的数据,将数据依据事务顺序和操作分发至目标数据应用系统

  • 元数据(Metadata),元数据模块是基础模块,用于定义数据字典模型,配置期定义捕获业务以及运行期数据格式转换等功能

  • 数据存储区(Stage Area),用于存储变更的数据,可作为临时数据缓冲区,也同时可以作为数据共享区被其他业务系统访问

  • 元数据库(Metadata Repository),用于存储系统内所有配置信息,包括任务配置信息、数据源信息、数据字典信息以及系统参数以及运行日志等信息

CDC的数据复制过程如下:

  • 捕捉进程(Capture)在源端数据库读取在线日志或归档日志,然后进行解析,提取其中数据的变更如增、删、改等DML操作,以及ALTER,DROP,TRUNCATE等DDL操作,并将解析的原始SQL语句传送到解析进程数据队列

  • 解析进程(Parser)接收捕获进程提供的数据,将原始SQL语句解析成原始java对象,并表示对象的操作类型,如(INSERT/UPDATE/DELETE/ALTER…),并将对象传送至过滤进程数据队列

  • 过滤进程(Filter)接收解析进程提供的数据,将数据合并为顺序的事务,通过系统内置过滤规则,将未提交的数据过滤,通过系统配置过滤规则,过滤大事务、长事务、用户名过滤等,并将合格的数据传送至格式化进程数据队列

  • 格式化进程(Formater)接收过滤进程提供的数据,将原始的SQL数据格式化为统一的java对象,并将数据传送至持久化进程或分发进程数据队列

  • 持久化进程(Persister)是可选进程,接收格式化进程提供的数据,将数据存储至持久化队列供其他系统订阅

  •  分发进程(Deliver),接收格式化进程提供的数据,将数据依据事务顺序和操作分发至目标数据应用系统

捕获进程(Capture)在每次读完日志中的数据变更并将数据通过分发进程(Deliver)传送到目标系统后,会记录检查点,记录当前完成捕捉的日志位置,检查点的存在可以使捕捉进程在中止并恢复后仍可从原来日志位置继续复制,分发进程提交到数据库成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。

主要功能

  • 基于数据库归档/在线日志实时捕获与同步变更数据

  • 支持不同厂商硬件(主机、存储)之间数据库的数据复制

  • 支持实时捕获Oracle,Oracle RAC数据库变更数据

  • 支持将数据同步至主流的关系型数据库、GBase数据库、Gemfire、Hbase等

  • 支持多对一和一对多的复制

  • 支持断点自动恢复,断网自动识别与恢复,断电重启后支持自动恢复

  • 支持复制DDL(ALTER,DROP,TRUNCATE)

  • 支持基于指定的时间点、时间段同步数据

  • 支持配置变更自动生效

  • 支持部署在中间平台上,不影响业务数据源服务器

  • 异构数据源双向复制数据

  • 仅对提交后的事务进行同步,按事务提交顺序复制数据

  • 支持事务过滤,支持对长事务、大事务以及按提交用户名进行过滤

  • 支持将数据落地成文件

  • 支持表复制,可以选择特定字段同步,支持异构数据源映射配置与字段级校验

  • 基于浏览器的管理与实时性能监控监控数据捕获过程和结果,统一调度、监控管理和日志管理等功能图形化管理操作界面,支持展现、启动、停止、恢复数据同步任务

  • 支持系统异常情况告警功能,支持通过Log,Email等告警形式,对设备、事务、应用的故障能够将信息发送至告警接口,实现自动报警并记录日志,提供扩展接口可扩展任意的告警方式

  • 数据复制后一致性校验,提供两端数据对比工具,能够对源数据库和目标数据中的数据内容进行对比,以查找出来两边数据表中内容的差异

  • 支持多进程并行复制

  • 支持定时启动、停止数据同步任务

  • 有很好的集成性和开放性和可定制性,包括可以将被变化的数据发布至扩展程序


技术开发 编程 技术框架 技术发展