☰分类导航

软件工程/数据采集与预处理
课程进度 27% · 第3/8章第3/8章 · 标签 1/8
— 1 —

事件接入是一份数据契约

接入端必须知道正在接收什么:event_id为稳定唯一标识,user_id为内部用户号,course_id为课程号,event_type来自约定枚举,event_time是带时区的发生时间,ingest_time由服务端赋值。不要直接信任客户端生成的金额、时间或任意新增字段。新增可空字段通常较容易兼容,改变字段含义则应升级版本并通知消费者。

接入确认也要定义:收到请求、写入缓冲和持久保存不是同一时刻。生产者应知道成功响应代表哪一步,并在超时重试时保持同一事件编号。

— 2 —

校验和隔离,而非静默丢弃

先校验JSON能否解析,再校验必填字段、类型、枚举及合理范围。无法解析的记录保存原始内容、来源位置和失败原因到隔离区;正常记录继续流动。缺失用户、负数播放时长、未来数天的事件时间属于不同问题,应分别计数。错误比例超过约定阈值时停止发布,否则报表可能看似正常却系统性漏掉某个客户端版本。

隔离区不是永久垃圾箱,应有处理负责人、数量监控与保留期限;修正规则后按来源位置定向重放,再比较修正前后的质量账。