当前基于 Hive 的离线数据仓库已经非常成熟,数据中台体系也基本上是围绕离线数仓进行建设。但是随着实时计算引擎的不断发展以及业务对于实时报表的产出需求不断膨胀,业界最近几年就一直聚焦并探索于两个相关的热点问题:实时数仓建设和大数据架构的批流一体建设。
实时数仓建设:实时数仓 1.0
传统意义上我们通常将数据处理分为离线数据处理和实时数据处理。对于实时处理场景,我们一般又可以分为两类,一类诸如监控报警类、大屏展示类场景要求秒级甚至毫秒级;另一类诸如大部分实时报表的需求通常没有非常高的时效性要求,一般分钟级别,比如 10 分钟甚至 30 分钟以内都可以接受。
对于第一类实时数据场景来说,业界通常的做法比较简单粗暴,一般也不需要非常仔细地进行数据分层,数据直接通过 Flink 计算或者聚合之后将结果写入 MySQL/ES/HBASE/Druid/Kudu 等,直接提供应用查询或者多维分析。如下所示:
而对于后者来说,通常做法会按照数仓结构进行设计,我们称后者这种应用场景为实时数仓,将作为本篇文章讨论的重点。从业界情况来看,当前主流的实时数仓架构基本都是基于 Kafka+Flink 的架构(为了行文方便,就称为实时数仓 1.0)。下图是基于业界各大公司分享的实时数仓架构抽象的一个方案:
这套架构总体依然遵循标准的数仓分层结构,各种数据首先汇聚于 ODS 数据接入层。再接着经过这些来源明细数据的数据清洗、过滤等操作,完成多来源同类明细数据的融合,形成面向业务主题的 DWD 数据明细层。在此基础上进行轻度的汇总操作,形成一定程度上方便查询的 DWS 轻度汇总层(注:这里没有画出 DIM 维度层,一般选型为 Redis/HBase,下文架构图中同样没有画出 DIM 维度层,在此说明)。最后再面向业务需求,在 DWS 层基础上进一步对数据进行组织进入 ADS 数据应用层&#x