增量数据同步工具Debezium介绍

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抽取原理

图片来自Debezium社区Blog

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,供下游消费程序使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249

推荐阅读更多精彩内容