
Debezium 变更数据捕获3 种部署方式对比让数据库变更实时可见【免费下载链接】debeziumChange data capture for a variety of databases. Please log issues at https://github.com/debezium/dbz/issues.项目地址: https://gitcode.com/gh_mirrors/de/debezium电商订单入库后搜索索引、缓存、积分系统都要跟着变。多数团队的做法是轮询数据库或应用双写结果要么延迟高、要么数据丢。Debezium 是一个开源的变更数据捕获Change Data Capture下称 CDC平台它直接读取数据库的事务日志把每一次行级变更实时变成事件流供下游系统消费——只捕获已提交的数据应用侧无需关心事务细节。为什么轮询和双写总出事故先看看两种传统方案的代价定时轮询靠updated_at字段查增量。延迟取决于轮询间隔高频轮询又白白消耗数据库 CPU而且删掉的行根本查不到。应用双写一次事务提交后应用自己负责更新缓存、搜索索引、发消息。应用崩在提交之后、同步之前多个系统就永久不一致了。数据库触发器各数据库实现不统一且触发器通常只能影响同一个库很难把变更推送给外部进程。CDC 的思路完全不同不去打扰业务代码而是旁听数据库自身的变更日志所有已提交的变更按原顺序、完整地流出来。一条变更记录的完整旅程用一个具体例子拆解。假设你在 MySQL 里执行UPDATE orders SET statuspaid WHERE id123之后会发生捕获变更写入 MySQL 的 binlogDebezium MySQL connector 以客户端身份读取这条日志流PostgreSQL 则走逻辑复制流机制不同但效果一致。持久化Kafka Connect 把事件写入 Kafka topic——默认一张表对应一个 topic。Kafka 负责副本冗余和全序保证多个下游可以各自独立消费互不影响。消费搜索服务、缓存失效服务、分析系统各自订阅事件流。某个服务停了几小时重启后从上次偏移量继续漏掉的事件一条不少。事件里不只包含变更后的行数据还有变更前状态、事务 ID、时间戳等元数据且无论源数据库是 MySQL 还是 PostgreSQL事件结构基本一致——下游写一套消费逻辑就能通用。两个容易忽略但很实用的细节快照能力首次接入时connector 会先对现有数据做一次初始快照也支持运行时触发的增量快照保证历史 增量无缝衔接。过滤与脱敏可以用 include/exclude 列表只捕获指定库表敏感列还能直接掩码脏数据不出库门。Debezium 的 3 种部署方式怎么选方式形态适合谁Kafka Connect最经典connector 跑在 Kafka Connect 集群里已有 Kafka 基础设施、需要多副本高可用的团队Debezium Server一个开箱即用的独立应用事件直接发给 Redis Streams、Kinesis、Pulsar、Pub/Sub 等不想搭 Kafka、下游就是某个消息/流系统的场景Embedded Engine作为 Java 库嵌入你的应用进程单服务内部消费变更、不想为一条数据流维护一整套集群对大多数场景的选型建议有 Kafka 就上 Kafka Connect生态和容错最成熟没有 Kafka 就用 Debezium Server只是应用内自己吃事件用嵌入式引擎即可。三种方式底层是同一套 connector后续迁移成本不高。什么时候该选它什么时候别用适合缓存失效、搜索索引更新事件到达即失效/重建比轮询快一个数量级微服务共享同一个数据库A 服务写入B 服务订阅事件即可感知无需消息总线双写CQRS / 读写分离写侧正常写库读侧模型Elasticsearch、数据仓库由事件异步驱动Outbox 模式落地业务表旁边放一张 Outbox 事件表用同一个事务写入Debezium 捕获这张表再分发——订单服务和物流服务就能可靠地解耦如下图所示不适合只想做一次性数据迁移——那是 ETL 工具的活CDC 平台的价值在持续捕获对延迟的要求是秒级以上且数据量极小——一个定时任务可能更简单三步完成首次接入准备环境装好 Docker用 Docker 拉起 MySQL开启 binlog和 Kafka Connect 各一个容器。官方教程就是全部组件走 Docker 的端到端流程见 Kafka Connect 教程。部署 connector向 Kafka Connect 注册 Debezium MySQL connector指定数据库地址、账号需要 REPLICATION 相关权限和要捕获的表。如果用 Debezium UI选源、填属性、确认三步点完即可界面如下验证事件流对表执行INSERT/UPDATE/DELETE在对应 Kafka topic 上应看到带op操作类型和前后镜像的 JSON 事件。验证通过后再考虑列级过滤、脱敏、topic 路由这些精细化配置。进阶阅读建议从这两处入手架构原理 讲清了事件在 Kafka Connect 与 broker 之间如何流转功能总览 列出了快照、过滤、掩码等能力清单。各数据库 connector 的参数细节则以 debezium-connector-mysql 这类模块目录下的文档为准。动手建议先拿一张非核心表跑通改一行、看到一条事件的最小闭环再谈生产接入——CDC 的价值只有在事件真的被消费、被对账之后才成立。跑通之后把缓存失效或索引同步这两类最痛的场景迁上去通常一周内就能看到轮询延迟和双写风险同时消失。【免费下载链接】debeziumChange data capture for a variety of databases. Please log issues at https://github.com/debezium/dbz/issues.项目地址: https://gitcode.com/gh_mirrors/de/debezium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考