网站首页 > 开源技术 正文
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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
猜你喜欢
- 2024-10-05 万字+28张图带你探秘小而美的规则引擎框架LiteFlow
- 2024-10-05 别克威朗轿车行驶无转向助力(别克威朗助力转向减弱是怎么回事?)
- 2024-10-05 数据迁移还需要停机?不停机上线的正确姿势你能get到吗?
- 2024-10-05 Mysql binlog应用场景与原理深度剖析
- 2024-10-05 常见性能优化策略的总结(常见性能优化策略的总结怎么写)
- 2024-10-05 Redis缓存与数据库数据一致性多方案分析及实践
- 2024-10-05 突破传统监测模式:业务状态监控HM的新思路
- 2024-10-05 流程建模方法-实际项目上常用的方法
- 2024-10-05 数据系统 - 领导和随从(领导者和跟随者的区别是什么?)
- 2024-06-27 一探B站后台架构, 他山之石, 何以攻玉
你 发表评论:
欢迎- 05-14WP8.1 GDR1的NTP时间同步没有解决问题
- 05-14抑郁症与焦虑症(四):补充色氨酸,5HTP的作用
- 05-14ntp服务器多久同步一次呢
- 05-14简单三步,轻松解决NVR时间不同步问题
- 05-14Linux的300+个真实运维场景——19 NTP 配置与管理
- 05-14海康威视录像机时间不准怎么办录像机无法查看回放录像,NTP校时
- 05-14安全加倍,解密极氪001电池安全技术
- 05-14海康威视录像机NTP服务器
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)