暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

实时数仓:流式数据建模

数舟 2021-07-26
2940






1




数据模型设计是贯穿数据处理过程的,在实时流式数据处理中也一样。实时建模与离线建模类似,数据模型整体上分为5层(ODS、DWD、DWS、ADS、DIM)。


模型分层


其中ODS数据属于操作数据层,是直接从业务系统采集来的原始数据。在这一层上,数据与离线系统是一致的。


ODS层实时进入的数据,会进行去重、清洗等任务,适度做一些维度退化工作,清洗后的数据会存放到DWD层中,DWD数据明细层的数据会回流到消息队列中,从而实时同步到下游实时任务中,同时会持久化到数据库中供离线系统使用。


一般而言,ODS和DWD层会尽可能保持与离线系统共用。


DWD层实时推送来的数据,被订阅后,汇总计算各个维度的通用指标,存储到DWS数据汇总层中,作为通用的数据模型进行使用。


如果是特定业务系统的维度指标,则订阅DWD层的数据,计算后存储到ADS层中。


所以DWS和ADS的区别是:是否是业务通用指标。DWS、ADS层数据会存储到实时读写的数据库系统中,供前端业务进行实时访问。


DWS、ADS的数据表类型和离线系统一样,分为事实表和维度表。


但在进行指标计算时,事实数据实时进行订阅,使用到的维度表数据不会进行实时更新获取,而使用的是T-2的离线数据。且维度表数据会存储在DIM层中,在计算时进行获取。


首先是因为维度数据变化比较缓慢,其次如果维度也进行实时更新,那么当天计算出来的数据一致性就会出现问题,比如2点前的计算结果是维度未更新时的结果,2点后的计算结果是维度更新后的结果。


所以维度数据,会由离线系统定期从ODS中获取数据,计算后存放在DIM层中。


那为什么维度数据的延迟为T-2?虽然最好情况是使用T-1的数据,即昨天的数据进行计算。但T-1的数据,是在0点之后通过ETL抽取到离线系统进行计算,而计算过程需要一段时间,假设凌晨2点计算完成,那2点之前的实时数据在计算时,使用的依然是T-2的旧维度数据。


所以为了保证数据一致性,T-1的维度数据虽然已经完成了计算,但不会直接使用,而是继续沿用T-2的维度数据。






2




ODS、DWD层的数据会存放在消息中间件中,如Kafka。


而DWD层数据在计算完成后,一般还会将数据推送到离线系统中,尽可能与离线系统实现共用。


这里的计算流向是:Kafka作为ODS层,存储实时数据;实时流计算任务从ODS获取数据进行计算,计算结果作为DWD层数据,写入到Kafka中存储,供下游实时计算,并且为了与离线系统保持一致,也会推送到离线系统中进行存储。


下游的实时流计算任务,从Kafka中获取到DWD层数据后,DWS、ADS计算任务会同时开始,维度通用指标结果作为DWS层数据存放到实时读写数据库系统中,如HBase、Druid、ClickHouse等,而特定系统的维度指标结果作为ADS层数据,同样存储到实时读写的数据库系统中。


至于DIM层的数据,则由离线ETL系统定期进行计算。


对于这几层的划分,在不同业务场景中可能会做不同调整,但原理相同,大家灵活应对即可。


至此,实时数仓中的流式建模就分享完了,如果喜欢的话,记得点赞、关注。下一期,我们在数舟再会!更多有料的内容,等你来!



往期推荐

实时数仓:Kappa架构

实时数仓:Lambda架构

【Hive】ORC与Parquet表的压缩

【秒懂】Hive常见压缩格式

Hive分桶的技术细节,你注意到了吗

Hive分桶一文读懂

开战吧!键盘侠们

Hive表类型(存储格式)一览





扫描二维码

获取更多精彩

数 舟



文章转载自数舟,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论