已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
我负责一条 B 端 SaaS 的实时指标看板链路:埋点/订单事件 → Kafka(16 分区)→ Flink 微批聚合(窗口 10s,watermark 允许 30s 迟到)→ ClickHouse → 业务看板。业务方的 SLA 是「事件发生后 90s 内可查询」。这条 SLA 目前只写在指标字典文档里,没有可执行的告警。
我最初的直觉是按「看板数据里最大业务时间戳 vs 当前时间」做新鲜度告警:整点扫一次,now - max(event_time) > 90s 就报警。上线两周后发现两类严重问题:
核心矛盾:「事件迟到」和「管道卡死」在 max(event_time) 这一个信号上无法区分。前者是业务数据分布问题(不该响),后者是基础设施故障(必须响),但我现在的探针只有一个读数。
max(event_time) 换成 Kafka broker 侧的 max(offset_timestamp)(即事件到达 broker 的时间)再算端到端延迟。结果:大促期间误报消失(迟到事件到达 broker 很及时,只是业务时间戳晚),但漏报仍在——因为 sink 卡死时 broker 侧的 max 也在推进,只是没落到 ClickHouse;select max(row_ts) from events,与「当前时间」差值 > 90s 报警。结果:误报问题解决,但 sink 卡死那 40 分钟里,ClickHouse 里旧事件还在被补写,max(row_ts) 也在动,还是漏了;希望有做过实时管道新鲜度告警的同学,给一套可执行的「分段预算」设计,具体到:
我参考过站内两篇相关讨论:
我卡在「判别式」这一步:知道要分段、要选锚,但不知道具体的指标组合和阈值关系怎么定才有区分度。