实时数仓调研
1. 实时数仓的几个关键问题
实时数仓的构建需要考虑几个关键问题:
-
实时性:Flink,代码性能,缩短计算链条;
-
稳定性:包括服务稳定、业务监控、系统监控;
-
吞吐量:根据业务切割流量等降低服务压力,数据分层;
-
扩展性:包括元数据可扩展性和资源水平可扩展性,当元数据经常改变时或数据量变化时是否能及时调整适应;
-
易用性:需求改变不需要通过重新打包发布,Streaming SQL文件更新即可。
2. 实时数仓案例
2.1 菜鸟仓配实时数仓
-
链接:https://yq.aliyun.com/articles/703367?spm=5176.10695662.1996646101.searchclickresult.99e26096Ea5LMJ
-
Blink提供Retraction机制:OLAP对于菜鸟中某个订单延迟,导致后续订单时间重算的变key统计,成本性能问题难以解决。因此Blink提供Retraction机制,即给下游发送一条新的删除消息。
-
SQL:Blink的强大,简易,灵活的SQL完成实时数据统计。
-
维表关联优化:异步IO,缓存,key缓存设置有效时间,按key分区。
2.2 美团点评实时数仓
- 链接:https://yq.aliyun.com/articles/741467?spm=5176.10695662.1996646101.searchclickresult.3140723dp2LjF1
- 美团配送实时数仓平台建设方案:https://wenku.baidu.com/view/1537003d370cba1aa8114431b90d6c85ed3a887e.html
- 分层:ODS 操作数据集、DWD 明细层和 DWS 汇总层以及应用层
- 实时数仓模型:明细层,汇总层放在Kafka,维度数据放在HBase或Tair,即席查询使用Flink完成;
- 准实时数仓模型:将明细层数据导入OLAP,后续基于OLAP计算能力做进一步汇总加工。
2.3 知乎实时数仓
-
链接:https://yq.aliyun.com/articles/712690?spm=5176.10695662.1996646101.searchclickresult.3140723dp2LjF1
-
数仓架构演进:Spark Streaming==> Flink ==> Streaming SQL平台化+元数据管理
-
动态配置:经常变化的元数据作为Streaming Broadcast变量
-
分层:原始层,明细层,汇总层,应用层(明细汇总层根据业务流量切分,降低Kafka出流量)
-
提高即席查询稳定性:核心报表指标计算转移到数仓,Druid只负责即席查询,满足多为分析需求。
2.4 阿里云实时数仓
- 链接:https://yq.aliyun.com/articles/699073?spm=5176.10695662.1996646101.searchclickresult.3140723dp2LjF1
- AnalyticDB:超大数据量验证的实时数据仓库,支持动态扩展,多维复杂分析
2.5 Qlik(Attunity)实时数仓搭建方案
- 链接:https://www.qlik.com/us/data-warehouse-automation/real-time-data-warehousing
- Qlik Replicate: 低延迟数据捕获变更(CDC技术)交付数据仓库;主要数据仓库平台的优化集成(Amazon Redshift,Azure SQL DW,Snowflake,Google BigQuery等)。
- Qlik Compose:自动化ETL并应用更新。
3. 实时数仓常用架构
Lambda架构 | Kappa架构 | Lambda+Kappa 混合架构 | |
---|---|---|---|
概述 | 实时+离线+服务 | 通过改进流计算系统来解决数据全量处理问题,使实时计算,离线计算使用同一套代码 | 使用Kappa架构进行流式处理,关键指标离线批处理矫正 |
优点 | 可以处理超大规模历史数据 | 统一离线实时数据口径 | — |
缺点 | 数据口径问题;需维护两套以上程序;数据源变化需重新开发;服务器压力大。 | 批处理吞吐量降低,开发周期长 | — |