标准答案
- CDC 适合已有表变更需要同步到搜索、数仓或缓存的场景,但要处理表结构、删除语义和无业务事件含义的问题。
- Outbox 适合业务需要明确事件名称、载荷和发布时机的场景,应用改动较明确但增加了发布表和扫描链路。
- 事务消息适合基础设施、生产者和消费者边界受统一协议支持的场景,跨数据库和外部服务时仍有边界。
- 无论采用哪种方式,都需要重复、乱序、积压、失败重放和数据对账能力。
题目解析
CDC 看到的是数据库行和事务日志变化,适合把事实同步到搜索、数仓或缓存,但它未必知道“支付成功”“订单取消”这类业务语义。Outbox 由应用显式写事件,语义更清晰但增加了发布链路。
事务消息只能覆盖参与该协议的生产者和消息系统,外部 HTTP、文件和第三方支付仍然有独立失败窗口。选择方案时要把最终副作用和恢复路径一起列出。
三种方案都要考虑重复、乱序、积压、Schema 演进和历史重放。评估重点不是哪种名词更强,而是下游需要什么事实、事件版本和可校对证据。
常见误区
- 误区:用 CDC 推断所有业务事件。改正:需要业务语义时由应用写领域事件,并保留与事实记录的关联。
- 误区:认为事务消息覆盖外部 HTTP 副作用。改正:外部调用仍需幂等、状态查询、Outbox 或补偿。
- 误区:没有为 Schema 演进和历史重放设计版本。改正:事件携带版本和兼容规则,重放使用可验证的解析路径。