首页/数据/数仓建模速查/流式事实表的去重与幂等
维度与事实设计149 条

流式事实表的去重与幂等

消息重投是常态:用业务唯一键 + 版本水位做流内去重(ROW_NUMBER)与入库幂等(主键 upsert),下游才能安全重放。

数仓建模速查数据更新于 2026-10-12
流内窗口去重取首条/末条
入库主键 upsert
水位进度可恢复

Flink 流内去重

Flink 流内去重
SELECT msg_id, order_id, amount, event_time
FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY msg_id ORDER BY event_time ASC) AS rn
  FROM kafka_order_source
) WHERE rn = 1;
去重窗口要有界:无界状态会无限增长,按消息保留期设置状态 TTL。

易错点

  • 去重状态无 TTL,作业内存持续上涨
  • 仅流内去重而入库不幂等,重放仍产生重复

数据来源与参考

  • Apache Flink 官方文档:Deduplication
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌