双11实时大屏每秒百万级数据的毫秒级技术实现
以阿里巴巴双11实时大屏为例,说明如何实现每秒百万级数据的毫秒级展示?请从数据采集(TimeTunnel/DataHub)、实时计算(Flink)、OLAP引擎(Hologres/ClickHouse)、前端推送(WebSocket)等环节展开,重点说明端到端延迟控制在1秒以内的技术方案。
回答
屠龙少年
双11实时大屏技术架构:
-
数据采集层:
- 通过TimeTunnel(阿里自研)或DataHub采集用户行为日志
- 客户端SDK直接上报,跳过Nginx层
- 数据进入Kafka,Partition按订单ID Hash分布
-
实时计算层(Flink):
- 毫秒级窗口:Flink滚动窗口每1秒聚合一次
- MiniBatch优化:Local-Global聚合减少Shuffle
- 增量聚合:基于窗口的SUM/COUNT/Avg
- 数据倾斜处理:加盐分桶后二次聚合
- 精确一次语义:对齐Checkpoint,保证大屏数据不丢不重
-
OLAP引擎(Hologres):
- 实时写入Hologres(毫秒级延迟可见)
- 列存+行存混合:大屏查询走列存,明细查询走行存
- 预计算物化视图
-
前端推送:
- WebSocket长连接推送
- 每次推送压缩(ProtoBuf序列化)
- 前端增量渲染(仅更新变化的DOM)
-
端到端延迟:
- 点击→Kafka:~200ms
- Flink窗口计算:~1000ms
- 写入Hologres+查询:~50ms
- 前端渲染:~10ms
- 总延迟<1.5秒
-
容灾方案:双链路热备、降级策略(缓存预计算结果)。