前提模型:

已经有一套基本可用的数据同步链路:MySQL → CDC 监听 Binlog → Kafka / MQ → 消费者 → 幂等写入下游。

接下来题目问“高可用和容错”,就不再重点讨论怎么同步,而是看 这条链路哪些地方可能坏

  • CDC 故障:采集进程可能挂、连接可能断 → 高可用部署 + 保存位点,恢复后继续采集
  • Kafka 故障:发送可能失败、Broker 可能异常 → ACK + 重试 + 持久化 + 多副本,保证消息尽量不丢
  • 消息积压:生产速度超过消费速度 → 监控 Lag + Partition + Consumer Group,让消费者可以水平扩容
  • 消费者故障:可能宕机、处理失败 → 失败重试,超过阈值进入死信队列
  • 重复消费:重试、宕机恢复可能重复处理 → 记录 Offset + 下游幂等
  • 最终兜底:极端情况下仍可能漏数、错数 → 定期对账 + 补偿 / 全量重建

所以整道题真正的思路就是:

先有基本同步链路 → 沿链路找故障点 → CDC 要能续、Kafka 要不丢、消费端要能扩、失败要能重试、重复要幂等、最后对账兜底。