实时数仓架构设计与选型
请介绍实时数仓的典型架构设计,以及在不同延迟和规模要求下的技术选型建议。
回答
编译有声
实时数仓分层架构:
[业务数据] [日志数据] [埋点数据]
↓ ↓ ↓
[Canal] [Flume] [SDK]
↓ ↓ ↓
[Kafka] ← 统一数据总线(核心)
↓
[Flink] ← 实时ETL(清洗/扩维/聚合)
↓
[OLAP引擎] → [应用层]
各层技术选型:
1. 数据接入层: | 场景 | 技术选型 | |------|----------| | MySQL Binlog同步 | Canal + Kafka | | 应用日志 | Flume / Filebeat + Kafka | | 前端埋点 | SDK + Kafka | | 第三方API | HTTP Polling + Kafka |
2. 消息队列层:
- Kafka: 标准选择,高吞吐、持久化
- Pulsar: 更低的延迟、更好的多租户隔离
- RocketMQ: 事务消息支持好(阿里系)
3. 实时计算层: | 需求 | 技术选型 | |------|----------| | 简单ETL/过滤 | Kafka Streams | | 复杂计算/窗口聚合 | Flink | | SQL友好 | Flink SQL / Spark Structured Streaming | | 毫秒级延迟 | Flink | | 秒级延迟 | Flink / Spark Streaming |
4. OLAP存储层: | 引擎 | 延迟 | 查询能力 | 场景 | |------|------|----------|------| | ClickHouse | 秒级 | SQL强,Join弱 | 实时报表、即席分析 | | Doris | 秒级 | SQL强,Join好 | 统一OLAP分析 | | Druid | 秒级 | 时序分析 | 监控、时序指标 | | TiDB | 毫秒级 | SQL完整 | 实时在线服务 | | Elasticsearch | 毫秒级 | 全文检索 | 日志搜索、APM | | HBase | 毫秒级 | Key-Value | 实时查询明细 |
实时数仓典型架构模式:
模式1:实时宽表(Flink维度关联)
- Flink从Kafka读取事实流,从维度表(HBase/Redis)实时关联维度
- 输出到ClickHouse/Doris,实现毫秒级OLAP查询
模式2:微批准实时
- Kafka → Spark Structured Streaming(分钟级)→ Hive/ClickHouse
- 适合对延迟不敏感的报表
模式3:Lambda + 实时层补充
- 实时层(Flink + Druid)提供秒级指标
- 批处理层(Hive + Spark)提供精准T+1报表
- 服务层合并两者结果