百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

增量数据同步工具Debezium介绍

mhr18 2025-03-05 18:07 39 浏览 0 评论

Debezium能做什么

RedHat开源的Debezium是一个将多种数据源实时变更数据捕获,形成数据流输出的开源工具。
它是一种CDC(Change Data Capture)工具,工作原理类似大家所熟知的Canal, DataBus, Maxwell等,是通过抽取数据库日志来获取变更的。
官方介绍为:

Debezium is an open source distributed platform for change data capture. Start it up, point it at your databases, and your apps can start responding to all of the inserts, updates, and deletes that other apps commit to your databases. Debezium is durable and fast, so your apps can respond quickly and never miss an event, even when things go wrong

为什么选择Debezium

笔者所在公司以PostgreSQL为源的实时同步需求较多。在对比各项同步工具之前,先来看看具体业务。

业务场景1:系统去O
要求使用PostgreSQL替换Oracle,使用GoldenGate搭建Oracle到PostgreSQL正向实时同步链路,待数据追平,将业务切换到PostgreSQL库,达成去O目的。若系统切换到PostgreSQL后存在问题,需要工具搭建PostgreSQL到Oracle的回退链路

业务场景2:不同BU子系统之间协作
数据库均为Postgres,系统B需要系统A的业务数据,但是由于网络拓扑复杂,库体积较大,如果以接口的形式提供数据,不仅需要增加额外的开发,同时会对A库造成一定压力,系统A无法接受,此时需要工具搭建不同BU之间PostgreSQL之间的同步,并要求对源库影响较小

业务场景3:OLAP、数仓
需要将PostgreSQL数据接入大数据平台,接入点为Kafka,消费逻辑由下游应用自行实现

因此,对于不支持PostgreSQL的工具,我们没有采用。
是否采用抽取日志这种实时同步的方式,取决于同步表变更数据量÷整库总变更数据量的比例,比例越高,非同步表的大事务越少,越推荐采用。否则,采用业务时间戳或触发器等准实时同步手段进行同步。
本文仅讨论抽取日志实时同步的工具。
我们对比了4种CDC工具,其中GoldenGate简称ogg,Debezium简称dbz,DataPipeline简称dp。对比如下:


支持的数据源、目标类型

对比项

GoldenGate

Debezium

DataPipeline

Pglogical

Mysql

源/目标

源/目标

/

Oracle

源/目标

源(不成熟)

源/目标

/

PostgreSQL

目标

源/目标

源/目标

Kafka

目标

目标

目标

/

SQLServer

目标

目标

/

MongoDB

目标


/

Hive/HBase/Hdfs

目标

/

目标

/

主要功能对比

对比项

GoldenGate

Debezium

DataPipeline

Pglogical

license

商业收费,oracle原厂支持

开源免费,非常活跃,迭代速度极快

商业收费,原厂支持

开源免费,迭代速度较快

DDL同步

MySQL,Oracle

MySQL,SQLServer

有限支持

PostgreSQL

双向同步

Y

N

有限支持

N

主键/唯一约束冲突处理

Y

需消费端自行实现

Y

Y

要求与源库装在同一台机器,目标库版本不低于源库

必须

初始化批量同步

initial load

snapshot

支持

copy

web界面

N

N

Y

N

数据幂等性

Y

需消费端自行实现

Y

Y

监控策略

命令行/monitor

http接口

web界面

命令行

调优策略

修改配置

较复杂

修改配置

修改配置

结构迁移

N

N

Y

N

通过对比综合考虑,我们最终决定
PostgreSQL->PostgreSQL的同步,目标库版本不低于源库版本,使用开源工具Pglogical
PostgreSQL->非PostgreSQL的同步,或高版本PostgreSQL->低版本PostgreSQL,使用Debezium + Kafka + 自行开发消费端

目前我们共有9条链路,2600多张表,通过Debezium进行同步。当然,此过程中碰到许多问题,笔者在后续文章中也会挑选一些有代表性的问题来阐述。

Debezium抽取原理



PostgreSQL在9.4版本推出了logical decoding功能,使得外部应用抽取并解析数据库的wal日志成为可能,我们称作逻辑流复制:

https://www.postgresql.org/docs/9.4/logicaldecoding.html

若想使用此功能,首先需要在数据库安装logical decoding插件,例如wal2json:

https://github.com/eulerto/wal2json

然后,以java应用为例,应用需使用PostgreSQL JDBC驱动包的逻辑流API,来获取logical decoding插件传输过来的events。相对于普通应用无法解析物理流复制而言,逻辑流复制的events是可以解析的,Debezium也正是利用了这一点,做到抽取的。
Debezium抽取并解析这些events之后,将其序列化存储到kafka,供下游消费程序使用。



作者:nchuxyz
链接:
https://www.jianshu.com/p/61e604299b5e

来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐

SQL入门知识篇(sql入门新手教程视频)

一、什么是数据库?什么是SQL?1、数据库:存放数据,可以很多人一起使用2、关系数据库:多张表+各表之间的关系3、一张表需要包含列、列名、行4、主键:一列(或一组列),其值能够唯一区分表中的每个行。5...

postgresql实现跨库查询-dblink的妙用

技术导语:用惯了oracle的dblink,转战postgresql,会一时摸不着头脑。本期就重点详细讲解postgresql如何安装dblink模块及如何使用dblink实现跨库查询。安装cont...

Oracle VM VirtualBox虚拟机软件(oracle vm virtualbox win10)

OracleVMVirtualBox是一款完全免费的虚拟机软件,下载银行有提供下载,软件支持安装windows、linux等多个操作系统,让用户可以在一台设备上实现多个操作系统的操作。同时软件有着...

开源 SPL 轻松应对 T+0(开源srs)

T+0问题T+0查询是指实时数据查询,数据查询统计时将涉及到最新产生的数据。在数据量不大时,T+0很容易完成,直接基于生产数据库查询就可以了。但是,当数据量积累到一定程度时,在生产库中进行大数据...

中小企业佳选正睿ZI1TS4-4536服务器评测

随着科技的不断发展,各行各业对于数据使用越加频繁,同时针对服务器的选择方面也就越来越多样化和细分化。那么对于我们用户来说,如何选择符合自身业务需求和最优性价比的产品呢?笔者将通过刚刚购买的这台服务器的...

MFC转QT:Qt基础知识(mfc和qt的区别)

1.Qt框架概述Qt的历史和版本Qt是一个跨平台的C++应用程序开发框架,由挪威公司Trolltech(现为QtCompany)于1991年创建。Qt的发展历程:1991年:Qt项目启动1995年...

数据库,QSqlTableModel(数据库有哪些)

QMYSQL——mysqlQSQLITE——sqliteQOICQ——orcale所需头文件.pro增加sql#include<QSqlDatabase>#include<Q...

python通过oledb连接dbf数据库(python连接jdbc)

起因:因为工作需要,需要读取dbf文件和系统数据中数据进行校对,因为知道dbf文件可以用sql查询,所以想能不能像mysql/oracle那样连接,再调用执行sql方法,通过一系列百度,尝试,最终通过...

Excel常用技能分享与探讨(5-宏与VBA简介 VBA与数据库)

在VBA(VisualBasicforApplications)中使用数据库(如Access、SQLServer、MySQL等)具有以下优点,适用于需要高效数据管理和复杂业务逻辑的场景:1....

Excel常用技能分享与探讨(5-宏与VBA简介 VBA与数据库-二)

以下是常见数据库软件的详细配置步骤,涵盖安装、驱动配置、服务启动及基本设置,确保VBA能够顺利连接:一、MicrosoftAccess适用场景:小型本地数据库,无需独立服务。配置步骤:安装Acces...

Windows Docker 安装(docker安装windows容器)

Docker并非是一个通用的容器工具,它依赖于已存在并运行的Linux内核环境。Docker实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的L...

Windows下安装Ubuntu虚拟机方法(windows下安装ubuntu20)

在Windows下安装Ubuntu虚拟机。选择使OracleVMVirtualBox安装Ubuntu虚拟机。1.下载和安装OracleVMVirtualBox:访问OracleVMVir...

java入门教程1 - 安装和配置(win和linux)

windows安装和配置安装javahttps://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html目前大部分项目的...

Centos7 安装Tomcat8服务及配置jdk1.8教程

1、下载jdk1.8压缩包下载地址:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.htmltom...

全网最完整的免费java教程讲义(一)——java配置和安装

一,安装Java1)安装JDK要学习和使用java,首先需要安装JDK(JavaDevelopemntKit),相当于java安装包。Java的下载页在甲骨文官网上:https://www.or...

取消回复欢迎 发表评论: