一、实时指标概述

大家好,我是这门课的主讲人。做了十几年数据工程,我见过太多团队在「实时」这两个字上栽跟头。今天咱们就从最基础的问题聊起——到底什么是实时指标?

1.1 什么是实时指标

实时指标,说白了就是「数据产生后,几乎立刻就能看到计算结果」。不是等明天、不是等下一个小时,而是秒级甚至毫秒级出结果。

举个例子。你在电商App上点了个「加入购物车」,后台立刻更新了「今日加购人数」这个数字。你点完刷新页面,数字就变了。这就是实时指标。

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

  • 实时:数据产生到结果展示,延迟在1秒以内。比如监控系统的CPU使用率。
  • 近实时:延迟在几秒到几分钟。比如电商大促的实时GMV,通常有5-10秒延迟。

核心要点:实时指标不是「零延迟」,而是「延迟在业务可接受范围内」。我见过有人非要追求毫秒级,结果架构搞得太复杂,反而经常出问题。

1.2 实时指标 vs 离线指标

很多新手搞不清实时和离线到底差在哪。我直接画个对比表,你一看就明白。

对比维度 实时指标 离线指标
计算时机 数据到达即计算 定时批量计算(如每天凌晨)
延迟要求 秒级~分钟级 小时级~天级
数据量 单条或小批量 全量或大批量
存储选型 Redis、Kafka、Druid HDFS、Hive、Spark
典型场景 实时大屏、风控、监控 日报、月报、数据仓库
准确性 允许一定误差 要求精确

嗯,这里要注意一个关键点:实时指标通常允许「近似准确」。为什么?因为实时计算要快,就不能等所有数据到齐。我在做双十一大屏时,就遇到过数据延迟导致实时GMV比实际少了0.3%,但业务方完全能接受——他们要的是趋势,不是精确到分。

避坑提醒:我曾经犯过一个错误——把离线指标的精确性要求强加给实时系统。结果呢?为了等迟到数据,延迟从3秒飙到3分钟,业务方直接炸了。记住:实时和离线是两套思维,别混着用。

1.3 实时计算的应用场景

你想想看,哪些地方非用实时不可?我挑几个典型场景说说。

场景一:实时监控与告警

服务器CPU飙到95%了,你能等明天看报表吗?肯定不行。实时监控就是干这个的——数据一到,立刻判断是否触发阈值,该报警就报警。

场景二:实时大屏

双十一的销售额大屏、物流配送的实时地图、工厂的生产线看板……这些都需要秒级刷新。我记得第一次做双十一大屏时,每秒要处理几十万笔订单,压力确实大。

场景三:实时风控

用户刚输完密码,系统就要判断这笔交易是不是盗刷。等离线算完,钱早没了。实时风控要求延迟在100毫秒以内,这是最硬核的实时场景之一。

场景四:实时推荐

你刷短视频,刚点了个「喜欢」,下一秒推荐流就变了。这就是实时推荐在起作用——根据你的即时行为调整推荐策略。

场景五:实时数据同步

比如从MySQL实时同步到数据仓库,或者从业务库同步到搜索引擎。这类场景对延迟要求没那么高,但数据不能丢。

我的建议:刚接触实时计算时,先从「近实时」场景入手,比如实时大屏。别一上来就搞风控,那个延迟要求太变态,容易劝退。

1.4 实时指标的核心架构

说了这么多,咱们看看实时指标系统长什么样。下面这张图是我自己总结的通用架构,你照着搭基本不会错。

实时指标系统核心架构 数据源 消息队列(Kafka) 实时计算引擎(Flink/Spark Streaming) 实时存储(Redis) OLAP引擎(Druid/ClickHouse) 消息回溯(Kafka) 实时大屏 告警系统 数据API 数据流方向:数据源 → 消息队列 → 实时计算引擎 → 存储层 → 应用层

这个架构图你记住几个关键点:

  • 消息队列是核心:没有Kafka,实时系统基本玩不转。它负责解耦和缓冲。
  • 计算引擎选型:Flink是目前的主流,Spark Streaming适合和离线共用一套代码。
  • 存储要分层:Redis扛实时查询,OLAP引擎扛历史分析,各司其职。

一句话总结:实时指标就是「数据快进快出,结果立等可取」。它和离线指标是互补关系,不是替代关系。做实时之前,先想清楚业务到底需要多快——别为了实时而实时。