一、实时OLAP概述:从概念到选型

1.1 OLAP到底是什么?

OLAP,全称是联机分析处理。说白了,就是让你能从多个维度、多个角度,快速地对大量数据进行查询和分析。

我经常跟团队里的新人这么解释:OLTP是“今天卖了多少笔”,OLAP是“过去三个月,华东区哪个品类的复购率在涨”。前者关注事务,后者关注洞察。

一个典型的OLAP查询,往往涉及:

  • 多维聚合:按时间、地区、产品线汇总销售额
  • 钻取与上卷:从“全国”下钻到“省份”,再上卷回“大区”
  • 切片与切块:只看“2024年Q3”且“品类=电子产品”的数据
  • 旋转:把行和列互换,换个视角看问题

嗯,这里要注意:OLAP不是一种数据库,而是一种分析模式。你可以用ClickHouse、Doris、甚至用MySQL加上物化视图来实现,只是体验天差地别。

1.2 实时OLAP vs 传统OLAP

传统OLAP,大家最熟悉的就是T+1模式。凌晨跑批,把昨天的数据从ODS清洗到DWD,再聚合到DWS,最后写入Cube。早上9点,老板打开报表,看到的是昨天的数据。

实时OLAP呢?数据从产生到可查询,延迟控制在秒级甚至毫秒级。我参与过的一个电商大促项目,要求活动开始后30秒内,运营就能看到实时GMV和库存水位。这就是典型的实时OLAP场景。

两者的核心差异,我整理了一张表:

对比维度 传统OLAP 实时OLAP
数据延迟 T+1,小时级 秒级,毫秒级
数据源 离线数仓,批量导入 消息队列(Kafka/Pulsar),实时流
存储模型 预聚合Cube,ROLAP 列存 + 倒排索引 + 实时写入
查询模式 固定报表,预定义维度 即席查询,高并发,低延迟
典型场景 财务月报,经营分析 实时大屏,风控,推荐
技术栈 Hive + Kylin / Druid ClickHouse / Doris / StarRocks

核心观点:实时OLAP不是要取代传统OLAP,而是互补。你想想看,财务对账你敢用实时数据吗?肯定不敢。但运营盯大屏,T+1又太慢了。所以,选型的关键是场景。

1.3 实时OLAP的应用场景

我这些年接触过的实时OLAP项目,场景大致可以归为以下几类:

  1. 实时大屏与监控:双11大屏、服务器监控、业务指标看板。数据延迟超过10秒,运营就会拍桌子。
  2. 实时风控与反欺诈:交易行为分析、异地登录检测。每一笔支付都要在毫秒级完成风险评分。
  3. 实时推荐与个性化:用户点击流实时入湖,分钟级更新用户画像,推荐系统才能跟上兴趣变化。
  4. 实时报表与自助分析:产品经理想查“今天新上线的功能,用户点击率如何”,不能等明天。
  5. 物联网与日志分析:百万级设备上报数据,实时聚合出设备健康度、异常告警。

我曾经帮一家金融科技公司做过实时风控平台。他们的要求是:交易事件从产生到风控决策,端到端延迟小于500毫秒。我们用了Kafka + Flink + Doris的架构,把规则引擎下推到存储层,才勉强压住延迟。嗯,这里有个坑:实时OLAP的瓶颈往往不在查询,而在写入。数据写入太快,存储层扛不住,查询就会变慢。

1.4 技术选型概览

说到技术选型,我先泼盆冷水:没有银弹。每个系统都有自己的擅长和短板。我按自己的经验,把主流引擎分了几个流派:

流派 代表产品 核心优势 典型局限
MPP列存 ClickHouse, Doris, StarRocks 单表聚合极快,高并发 多表JOIN较弱,更新成本高
预聚合Cube Apache Kylin, Druid 超大规模预计算,查询稳定 灵活性差,维度爆炸
搜索引擎 Elasticsearch 全文检索,日志分析 聚合性能一般,存储成本高
流式OLAP RisingWave, Materialize 实时物化视图,SQL化流处理 生态较新,大规模场景验证不足

个人建议:如果你的场景是大宽表 + 高并发点查 + 简单聚合,ClickHouse或StarRocks是首选。如果多表关联 + 复杂分析,Doris的优化器更成熟。如果数据量极大且查询模式固定,Kylin的预计算方案依然能打。

你可能会问:那Flink和Spark Streaming算什么?它们是流计算引擎,负责数据的实时加工和清洗,最终数据还是要落到OLAP引擎里才能被查询。所以,一个完整的实时OLAP架构,通常是流计算 + OLAP引擎的组合。

1.5 实时OLAP架构全景图

下面这张图,是我自己总结的实时OLAP架构分层。它涵盖了从数据接入到数据服务的完整链路:

实时OLAP架构全景图 实时OLAP架构全景图 数据源层 业务DB(MySQL/PostgreSQL) | 日志(Filebeat/Fluentd) | 埋点(SDK) | IoT设备 消息队列层 Apache Kafka / Apache Pulsar / AWS Kinesis 流计算层 Apache Flink / Spark Streaming / RisingWave OLAP引擎层 ClickHouse / Apache Doris / StarRocks / Elasticsearch 数据服务层 REST API / JDBC / ODBC / 大屏WebSocket推送 说明:数据从源端经过消息队列缓冲,由流计算引擎清洗加工,最终写入OLAP引擎提供实时查询服务

这张图我用了很多年。每次给团队做架构评审,我都会先画出这五层。你会发现,实时OLAP的核心不是某一款产品,而是整个链路的协同。哪一层出了问题,端到端延迟都会崩。

避坑提醒:我曾经在一个项目中,只关注了OLAP引擎的查询性能,却忽略了消息队列的积压处理。结果大促流量一上来,Kafka消费 lag 飙到几百万条,实时变成了“半小时级”。所以,实时OLAP的瓶颈往往在链路的前半段——数据接入和流计算。

1.6 小结

这一章我们聊了OLAP的基本概念,对比了实时与传统OLAP的差异,梳理了典型应用场景,也给出了技术选型的参考。你可能会觉得信息量有点大,没关系,后面的章节我们会逐一深入每个环节。

记住一句话:实时OLAP不是技术炫技,而是业务驱动。选型之前,先想清楚你的用户到底需要多快的数据,以及他们愿意为这个“快”付出多少成本。