Skip to content
🔗 分享本题
查看我的学习进度 →

26 模块 Q23 教学图:设计并实现一个接收重复事件的数据摄取接口,怎样保证结果可靠?

🧠 图解记忆:先澄清事件是否有稳定 ID、是否允许乱序、更新语义、吞吐、保留期和下游一致性要求;点击图片可查看原图。

💡 答案要点

先澄清事件是否有稳定 ID、是否允许乱序、更新语义、吞吐、保留期和下游一致性要求。

核心设计:

  • 接口快速校验并写入持久队列,返回接收状态;
  • 使用 (source, event_id) 作为幂等键,数据库唯一约束是最后防线;
  • 消费者采用条件 upsert,按 event_version 或 event_time 处理乱序;
  • 业务写入与 outbox 放在同一事务,避免状态已变但下游事件丢失;
  • 暂时错误有限重试,永久错误进入 DLQ 并保留原因;
  • 提供 checkpoint、重放、对账以及重复/迟到/失败指标。

编码时应把“至少一次投递”与“业务效果只发生一次”区分开。对于付款等副作用,还需要下游同样接受幂等键,不能只在入口去重。