1. 实时指标概述

各位同学好,我是老张。做实时计算这些年,踩过不少坑,也积累了一些实战经验。今天咱们聊聊实时指标——这个听起来很基础、但实际做起来门道不少的话题。

先说说我自己的经历。几年前我刚接手一个实时大屏项目,业务方说要「实时看到用户行为」。我当时想,这不就是跑个流任务嘛,简单。结果上线第一天,数据对不上,延迟忽高忽低,业务方直接找到我办公室……嗯,从那以后我才真正开始认真琢磨:到底什么是实时指标?它跟离线指标差在哪?

什么是实时指标

实时指标,说白了就是数据产生后,在极短时间内就能被计算和展示出来的度量值。这个「极短时间」没有标准,但通常指秒级到分钟级。

举个例子:你在电商App上点击了一个商品,3秒后大屏上就更新了「今日点击量」。这就是实时指标。

我个人习惯把实时指标分成两类:

  • 纯实时指标:数据一到就计算,不依赖历史数据。比如当前在线人数。
  • 准实时指标:需要结合历史数据做聚合,但窗口控制在分钟级。比如过去5分钟的成交额。

核心要点:实时指标的关键不是「快」,而是「可容忍的延迟」+「数据一致性」。很多新手只追求速度,忽略了准确性,结果就是「快但错」。

实时指标与离线指标的区别

这个问题我面试时经常问。很多人能说出「实时快、离线慢」,但深层的差异往往说不清楚。

你想想看,离线指标跑的是T+1的数据,今天算昨天的。实时指标呢?数据来了就得算,算完就得用。这背后是两种完全不同的技术栈和思维方式。

我整理了一张对比表,把核心差异列出来:

对比维度 实时指标 离线指标
计算延迟 秒级~分钟级 小时级~天级
数据范围 当前窗口数据 全量历史数据
计算引擎 Flink、Spark Streaming Hive、Spark SQL
存储选型 Redis、HBase、Druid HDFS、Hive表
容错机制 状态恢复、Exactly-Once 重跑任务
数据精度 可能存在近似值 精确计算
开发复杂度 高(要考虑乱序、延迟、背压) 相对低

我的经验:离线指标做错了,大不了明天重跑。实时指标做错了,影响的是正在看大屏的业务方。所以实时开发对「数据正确性」的要求其实更高,只是很多人没意识到。

实时指标的应用场景

说到应用场景,我这些年接触过的项目基本覆盖了大部分常见场景。咱们挑几个典型的说说:

1. 实时大屏

这是最直观的场景。双11大屏、运营监控大屏、系统健康大屏……数据一跳一跳地往上翻,看着就带劲。但要注意,大屏上的数字如果错了,那可是当着老板的面出丑。我曾经就遇到过——大屏显示成交额100亿,实际只有80亿,原因是重复计算了退款订单。

2. 实时风控

金融场景里,每一笔交易都需要毫秒级判断。用户刚刷完卡,系统就得决定:这笔交易正常还是异常?这时候离线指标根本来不及。实时指标配合规则引擎,才能做到「边交易边判断」。

3. 实时推荐

你在刷短视频,系统根据你刚刚的点击行为,实时调整推荐内容。这背后就是实时指标在支撑——「用户最近1分钟的行为序列」就是一个典型的实时指标。

4. 实时监控告警

服务器CPU飙高了、接口响应变慢了、订单量突然暴跌了……这些都需要实时指标来触发告警。离线指标等发现问题时,用户早就跑光了。

5. 实时数据同步

这个场景比较特殊,但很常见。业务库的数据需要实时同步到数仓或搜索引擎,这时候实时指标用来衡量「同步延迟」——比如从MySQL到ES的延迟是3秒还是30秒。

下面这张图是我自己总结的实时指标应用全景,帮你快速建立整体认知:

实时指标应用全景图 实时指标 日志采集 消息队列 业务数据库 实时大屏 实时风控 实时推荐 监控告警 数据同步 实时报表 核心原则:实时指标不是越快越好,而是在「可接受的延迟」内保证「数据准确性」 选型时根据业务容忍度决定:风控要毫秒级,大屏可以接受秒级

避坑提醒:我曾经在一个项目中,业务方要求「所有指标都要实时」。结果做了三个月,发现80%的指标其实T+1完全够用。实时是有成本的——计算资源、存储成本、开发维护成本都比离线高。所以,不是所有指标都需要实时化,先问清楚业务场景再动手。

实时指标的核心挑战

说了这么多好处,也得聊聊难点。实时指标开发,说白了就是跟「不确定性」打交道:

  • 数据乱序:数据到达的顺序和产生顺序不一致,怎么处理?
  • 数据延迟:某些数据迟到了,是等还是算?
  • 状态管理:实时任务的状态怎么保存?挂了怎么恢复?
  • 背压问题:数据量突然暴增,系统扛不住怎么办?
  • 数据一致性:实时结果和离线结果对不上,怎么排查?

这些问题,后面的章节咱们会一个一个拆解。今天这一讲,主要是帮你建立对实时指标的整体认知。

记住一句话:实时指标不是离线指标的加速版,而是一套全新的技术体系。思维方式、技术选型、运维手段都不一样。准备好了吗?后面还有29章等着咱们。