ClickHouse 统计链路上线,不能只看应用启动成功。更重要的是确认旧链路、新链路、开关、MQ、对象存储和 ClickHouse 表都能对上。
下面是一份通用的上线验证思路。
先明确本次修改点
上线前先列出本次变更范围,例如:
- 是否拆分了 topic。
- 是否新增了消费者。
- 是否把单条写入改成批量写入。
- 是否把大字段外置到对象存储。
- 是否新增失败兜底日志。
- 是否增加开关控制新旧链路。
只有范围清楚,测试才不会变成“随便点点看”。
老链路要先验证
如果上线采用灰度开关,第一步应该确认开关关闭时仍然走老链路。
可以看:
- 老消费者日志是否仍有消费。
- 老 topic 是否仍有消息进入。
- ClickHouse 老表或老字段是否仍能写入。
- 新消费者是否不会误消费。
这一步很重要。它证明新代码上线后,即使暂时不开启新功能,也不会破坏原有链路。
新链路要看日志和数据
打开开关后,需要同时看应用日志和 ClickHouse 查询结果。
日志侧关注:
- 消费者是否拿到新 topic 消息。
- 批量处理数量是否符合预期。
- 是否出现重复消费或空消费。
- 失败兜底日志是否清楚。
数据侧关注:
- 新数据是否进入目标表。
- 字段是否完整。
- 时间字段是否符合时区预期。
- 大字段是否被替换为外部引用。
- 外部引用是否能反查原始内容。
日志只能证明代码跑了,查询结果才能证明数据真的落下来了。
大字段外置要单独测
如果链路里有对象存储,建议单独验证:
- 大字段上传成功时,ClickHouse 中保存引用路径。
- 上传失败时,不会静默丢数据。
- 保存的引用不暴露无关域名或敏感参数。
- 后续排查能通过引用找到原始内容。
大字段处理最怕半成功:ClickHouse 写了路径,但对象没有上传;或者对象上传了,但数据库里没有关联。
回滚方案要提前写清楚
回滚不是上线失败后再想。上线前至少要明确:
- 关闭哪个开关可以回到旧链路。
- 新 topic 消费者是否需要停止。
- 老消费者是否仍然保留。
- 新增表或字段是否影响旧代码。
- 已写入的新数据是否需要补偿或忽略。
如果新链路只是读写旁路,回滚通常可以通过关闭开关完成。如果新链路已经改变主写入路径,就要准备更严格的补偿方案。
验证清单
可以把上线检查整理成下面几项:
- 配置已生效。
- topic 权限和消费关系已配置。
- 老链路开关关闭时可用。
- 新链路开关打开时可用。
- ClickHouse 能查到新数据。
- 对象存储引用可反查。
- 失败日志可定位 payload。
- 关闭开关后能回到旧链路。
ClickHouse 链路上线的核心是“可验证、可回滚、可补偿”。只要这三点做扎实,统计链路就算复杂,也能有序推进。
正文完




