课程进度 27% · 第3/8章第3/8章 · 标签 1/8
— 1 —
事件接入是一份数据契约
接入端必须知道正在接收什么:event_id为稳定唯一标识,user_id为内部用户号,course_id为课程号,event_type来自约定枚举,event_time是带时区的发生时间,ingest_time由服务端赋值。不要直接信任客户端生成的金额、时间或任意新增字段。新增可空字段通常较容易兼容,改变字段含义则应升级版本并通知消费者。
接入确认也要定义:收到请求、写入缓冲和持久保存不是同一时刻。生产者应知道成功响应代表哪一步,并在超时重试时保持同一事件编号。
— 2 —
校验和隔离,而非静默丢弃
先校验JSON能否解析,再校验必填字段、类型、枚举及合理范围。无法解析的记录保存原始内容、来源位置和失败原因到隔离区;正常记录继续流动。缺失用户、负数播放时长、未来数天的事件时间属于不同问题,应分别计数。错误比例超过约定阈值时停止发布,否则报表可能看似正常却系统性漏掉某个客户端版本。
隔离区不是永久垃圾箱,应有处理负责人、数量监控与保留期限;修正规则后按来源位置定向重放,再比较修正前后的质量账。