数据仓库架构-实时数仓演进

1 L离线数仓架构

数据仓库从模型层面分为三层:

  • ODS,操作数据层,保存原始数据;
  • DW,数据仓库明细层,根据主题定义好事实与维度表,保存最细粒度的事实数据;
  • DM,数据集市/轻度汇总层,在DWD层的基础之上根据不同的业务需求做轻度汇总;

典型的数仓存储是HDFS/Hive,ETL可以是MapReduce脚本或HiveSQL。

image

2 Lambda架构

随着大数据应用的发展,人们逐渐对系统的实时性提出了要求,为了计算一些实时指标,就在原来离线数仓的基础上增加了一个实时计算的链路,并对数据源做流式改造(即把数据发送到消息队列),实时计算去订阅消息队列,直接完成指标增量的计算,推送到下游的数据服务中去,由数据服务层完成离线&实时结果的合并。

注:流处理计算的指标批处理依然计算,最终以批处理为准,即每次批处理计算后会覆盖流处理的结果。(这仅仅是流处理引擎不完善做的折中

Lambda架构问题:

  • 1.同样的需求需要开发两套一样的代码
    这是Lambda架构最大的问题,两套代码不仅仅意味着开发困难(同样的需求,一个在批处理引擎上实现,一个在流处理引擎上实现,还要分别构造数据测试保证两者结果一致),后期维护更加困难,比如需求变更后需要分别更改两套代码,独立测试结果,且两个作业需要同步上线。
  • 2.资源占用增多:同样的逻辑计算两次,整体资源占用会增多(多出实时计算这部分)
    image

3 Kappa架构

Lambda架构虽然满足了实时的需求,但带来了更多的开发与运维工作,其架构背景是流处理引擎还不完善,流处理的结果只作为临时的、近似的值提供参考。后来随着Flink等流处理引擎的出现,流处理技术很成熟了,这时为了解决两套代码的问题,LickedIn 的Jay Kreps提出了Kappa架构

Kappa架构可以认为是Lambda架构的简化版(只要移除lambda架构中的批处理部分即可)。

在Kappa架构中,需求修改或历史数据重新处理都通过上游重放完成。

Kappa架构最大的问题是流式重新处理历史的吞吐能力会低于批处理,但这个可以通过增加计算资源来弥补。

image

由于我们汇总层业务要求为5分钟粒度计算,可以接受5分钟延迟。为了代码复用和中间结果保存。对实时计算内部分层进行了改进。

 

image2020-2-21_17-29-9.png?version=1&modificationDate=1582277349000&api=v2uploading.4e448015.gif转存失败重新上传取消

 

 

架构的重新处理过程

重新处理是人们对Kappa架构最担心的点,但实际上并不复杂:

  • 1.选择一个具有重放功能的、能够保存历史数据并支持多消费者的消息队列,根据需求设置历史数据保存的时长,比如Kafka,可以保存全部历史数据。
  • 2.当某个或某些指标有重新处理的需求时,按照新逻辑写一个新作业,然后从上游消息队列的最开始重新消费,把结果写到一个新的下游表中。
  • 3.当新作业赶上进度后,应用切换数据源,读取2中产生的新结果表。
  • 4.停止老的作业,删除老的结果表。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值