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

增量数据同步工具Debezium介绍

moboyou 2025-04-07 17:42 11 浏览

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

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

相关推荐

php宝塔搭建部署实战服务类家政钟点工保姆网站源码

大家好啊,我是测评君,欢迎来到web测评。本期给大家带来一套php开发的服务类家政钟点工保姆网站源码,感兴趣的朋友可以自行下载学习。技术架构PHP7.2+nginx+mysql5.7+JS...

360自动收录简介及添加360自动收录功能的详细教程

以前我们都是为博客站点添加百度实时推送功能,现在360已经推出了自动收录功能,个人认为这个功能应该跟百度的实时推送功能差不多,所以我们也应该添加上这个功能,毕竟360在国内的份额还是不少的。360自动...

介绍一个渗透测试中使用的WEB扫描工具:Skipfish

Skipfish简介Skipfish是一款主动的、轻量级的Web应用程序安全侦察工具。它通过执行递归爬取和基于字典的探测来为目标站点准备交互式站点地图。该工具生成的最终报告旨在作为专业Web应用程序安...

好程序员大数据培训分享Apache-Hadoop简介

好程序员大数据培训分享Apache-Hadoop简介  好程序员大数据培训分享Apache-Hadoop简介,一、Hadoop出现的原因:现在的我们,生活在数据大爆炸的年代。国际数据公司已经预测在20...

LPL比赛数据可视化,完成这个项目,用尽了我的所有Python知识

LPL比赛数据可视化效果图完成这个项目,我感觉我已经被掏空了,我几乎用尽了我会的所有知识html+css+javascript+jQuery+python+requests+numpy+mysql+p...

网站被谷歌标记“有垃圾内容”但找不到具体页面?

谷歌的垃圾内容判定机制复杂,有时违规页面藏得深(如用户注册页、旧测试内容),或是因第三方插件漏洞被注入垃圾代码,导致站长反复排查仍毫无头绪。本文提供一套低成本、高执行性的解决方案。你将学会如何利用谷歌...

黑客必学知识点--如何轻松绕过CDN,找到真实的IP地址

信息收集(二)1、cms识别基础为什么要找CMS信息呢?因为有了CMS信息之后,会给我们很多便利,我们可以搜索相应CMS,有没有公开的漏洞利用根据敏感文件的判断:robots.txt文件robots....

Scrapy 爬虫完整案例-提升篇

1Scrapy爬虫完整案例-提升篇1.1Scrapy爬虫进阶案例一Scrapy爬虫案例:东莞阳光热线问政平台。网站地址:http://wz.sun0769.com/index.php/que...

如何写一个疯狂的爬虫!

自己在做张大妈比价(http://hizdm.com)的时候我先后写了两个版本的爬虫(php版本和python版本),虽然我试图将他们伪装的很像人但是由于京东的价格接口是一个对外开放的接口,如果访问频...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Python爬虫高级之JS渗透登录新浪微博 | 知了独家研究

小伙伴们看到标题可能会想,我能直接自己登陆把登陆后的cookie复制下来加到自定义的请求头里面不香嘛,为什么非要用python模拟登录的过程?如果我们是长期爬取数据,比如每天早上中午和晚上定时爬取新浪...

使用Selenium实现微博爬虫:预登录、展开全文、翻页

前言想实现爬微博的自由吗?这里可以实现了!本文可以解决微博预登录、识别“展开全文”并爬取完整数据、翻页设置等问题。一、区分动态爬虫和静态爬虫1、静态网页静态网页是纯粹的HTML,没有后台数据库,不含程...

《孤注一掷》关于黑客的彩蛋,你知道多少?

电影总是能引发人们的好奇心,尤其是近日上映的电影《孤注一掷》。这部电影由宁浩监制,申奥编剧执导,是一部反诈骗犯罪片。今天给大家讲解一下影片潘生用的什么语言,以及写了哪些程序。揭秘影片中的SQL注入手法...

python爬虫实战之Headers信息校验-Cookie

一、什么是cookie上期我们了解了User-Agent,这期我们来看下如何利用Cookie进行用户模拟登录从而进行网站数据的爬取。首先让我们来了解下什么是Cookie:Cookie指某些网站为了辨别...

「2022 年」崔庆才 Python3 爬虫教程 - urllib 爬虫初体验

首先我们介绍一个Python库,叫做urllib,利用它我们可以实现HTTP请求的发送,而不用去关心HTTP协议本身甚至更低层的实现。我们只需要指定请求的URL、请求头、请求体等信息即...