大家好,我是球球。今天,我们先了解一下数据仓库架构的演变过程,本文主要从五个方面进行介绍

  1. 数据仓库概念

  2. 离线大数据架构

  3. Lambda 架构

  4. Kappa 架构

  5. Lambda 架构与 Kappa 架构的对比

1 数据仓库概念

数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。

数据仓库概念是 Inmon 于 1990 年提出并给出了完整的建设方法。随着互联网时代来临,数据量暴增,开始使用 大数据工具 来替代经典数仓中的传统工具。此时仅仅是工具的取代,架构上并没有根本的区别,可以把这个架构叫做离线大数据架构

后来随着业务实时性要求的不断提高,人们开始在 离线大数据架构 基础上加了一个加速层,使用流处理技术直接完成那些实时性要求较高的指标计算,这便是 Lambda 架构。

再后来,实时的业务越来越多,事件化的数据源也越来越多,实时处理从次要部分变成了主要部分,架构也做了相应调整,出现了以实时事件处理为核心的 Kappa 架构

2 离线大数据架构

数据源通过离线的方式导入到离线数仓中。下游应用根据业务需求选择直接读取 DM 或加一层数据服务,比如 MySQL 或 Redis。数据仓库从模型层面分为三层:

ODS,操作数据层,保存原始数据;

DWD,数据仓库明细层,根据主题定义好事实与维度表,保存最细粒度的事实数据;

DM,数据集市/轻度汇总层,在 DWD 层的基础之上根据不同的业务需求做轻度汇总;

如果要细分,分为五层:

ODS 层

ODS 层: Operation Data Store,数据准备区,贴源层。直接接入源数据的:业务库、埋点日志、消息队列等。ODS 层数数据仓库的准备区

DW数仓

DWD 层:Data Warehouse Details,数据明细层,属于业务层和数据仓库层的隔离层,把持和 ODS 层相同颗粒度。进行数据清洗和规范化操作,去空值/脏数据、离群值等。

DWM 层:Data Warehouse middle,数据中间层,在 DWD 的基础上进行轻微的聚合操作,算出相应的统计指标

DWS 层:Data warehouse service,数据服务层,在 DWM 的基础上,整合汇总一个主题的数据服务层。汇总结果一般为宽表,用于 OLAP、数据分发等。

ADS层

ADS 层:Application data service, 数据应用层,存放在 ES,Redis、PostgreSql 等系统中,供数据分析和挖掘使用。

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

数仓分层的优点:

  1. 划清层次结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。

  2. 数据血缘追踪:简单来讲可以这样理解,我们最终给下游是直接能使用的业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。

  3. 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。

  4. 把复杂问题简单化。将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。

  5. 屏蔽原始数据的异常。屏蔽业务的影响,不必改一次业务就需要重新接入数据。

3  Lambda 架构

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

Lambda 架构(Lambda Architecture)是由 Twitter 工程师南森·马茨(Nathan Marz)提出的大数据处理架构。这一架构的提出基于马茨在 BackType 和 Twitter 上的分布式数据处理系统的经验。

Lambda 架构使开发人员能够构建大规模分布式数据处理系统。它具有很好的灵活性和可扩展性,也对硬件故障和人为失误有很好的容错性。

Lambda 架构总共由三层系统组成:批处理层(Batch Layer)速度处理层(Speed Layer),以及用于响应查询的服务层(Serving Layer)

在 Lambda 架构中,每层都有自己所肩负的任务。

批处理层 存储管理主数据集(不可变的数据集)和预先批处理计算好的视图。

批处理层 使用可处理大量数据的分布式处理系统预先计算结果。它通过处理所有的已有历史数据来实现数据的准确性。这意味着它是基于完整的数据集来重新计算的,能够修复任何错误,然后更新现有的数据视图。输出通常存储在只读数据库中,更新则完全取代现有的预先计算好的视图。

速度处理层 会实时处理新来的大数据。

速度层 通过提供最新数据的实时视图来最小化延迟。速度层所生成的数据视图可能不如批处理层最终生成的视图那样准确或完整,但它们几乎在收到数据后立即可用。而当同样的数据在批处理层处理完成后,在速度层的数据就可以被替代掉了。

Lambda 架构问题:

虽然 Lambda 架构使用起来十分灵活,并且可以适用于很多的应用场景,但在实际应用的时候,Lambda 架构也存在着一些不足,主要表现在它的维护很复杂。

(1)同样的需求需要开发两套一样的代码:这是 Lambda 架构最大的问题,两套代码不仅仅意味着开发困难(同样的需求,一个在批处理引擎上实现,一个在流处理引擎上实现,还要分别构造数据测试保证两者结果一致),后期维护更加困难,比如需求变更后需要分别更改两套代码,独立测试结果,且两个作业需要同步上线。

(2)资源占用增多:同样的逻辑计算两次,整体资源占用会增多(多出实时计算这部分)

4  Kappa 架构

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

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

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

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

Kappa 架构的重新处理过程:

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

(1)选择一个具有重放功能的、能够保存历史数据并支持多消费者的消息队列,根据需求设置历史数据保存的时长,比如 Kafka,可以保存全部历史数据。

(2)当某个或某些指标有重新处理的需求时,按照新逻辑写一个新作业,然后从上游消息队列的最开始重新消费,把结果写到一个新的下游表中。

(3)当新作业赶上进度后,应用切换数据源,读取 2 中产生的新结果表。

(4)停止老的作业,删除老的结果表。

5 Lambda 架构与 Kappa 架构的对比

如下图所示:

  1. 在真实的场景中,很多时候并不是完全规范的 Lambda 架构或 Kappa 架构,可以是两者的混合,比如大部分实时指标使用 Kappa 架构完成计算,少量关键指标(比如金额相关)使用 Lambda 架构用批处理重新计算,增加一次校对过程。

  1. Kappa 架构并不是中间结果完全不落地,现在很多大数据系统都需要支持机器学习(离线训练),所以实时中间结果需要落地对应的存储引擎供机器学习使用,另外有时候还需要对明细数据查询,这种场景也需要把实时明细层写出到对应的引擎中。

实时数仓之 Kappa 架构与 Lambda 架构相关推荐

  1. 实时数仓之 Kappa 架构与 Lambda 架构(建议收藏!)

    大家好,我是土哥. 2021 年 1月份,给大家重点分享一下离线数仓与实时数仓的内容.今天,我们先了解一下数据仓库架构的演变过程,本文主要从五个方面进行介绍 数据仓库概念 离线大数据架构 Lambda ...

  2. 离线数仓与实时数仓的比较

    01数仓架构演变 20世纪70年代,MIT(麻省理工)的研究员致力于研究一种优化的技术架构,该架构试图将业务处理系统和分析系统分开,即将业务处理和分析处理分为不同层次,针对各自的特点采取不同的架构设计 ...

  3. 离线数仓和实时数仓的区别

    作者介绍 @车云祥 大宇无限  数据产品负责人 主要负责全公司底层数据治理,构建统一指标体系: 主导 BI 系统.用户画像系统.广告投放平台.广告流量优化等设计工作: 推动 Snaptube.Lark ...

  4. 中秋干货 | 架构进阶之路上的实时数仓

    点击上方"朱小厮的博客",选择"设为星标" 回复"666"获取新整理的1000+GB资料 数据仓库也是公司数据发展到一定规模后必然会提供的一 ...

  5. 数据查询和业务流分开_数据仓库介绍与实时数仓案例

    1.数据仓库简介 数据仓库是一个面向主题的(Subject Oriented).集成的(Integrate).相对稳定的(Non-Volatile).反映历史变化(Time Variant)的数据集合 ...

  6. 如果你也想做实时数仓…

    数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务,数据仓库的建设也是"数据智能"中必不可少的一环. 本文将从数据仓库的简介.经历了怎样的发展.如何建设.架构演变.应用案 ...

  7. adb实时获取屏幕_实时数仓 | 你需要的是一款合适且强大的OLAP数据库(上)

    欢迎扫码关注我的公众号,回复[JAVAPDF]可以获得一份200页秋招面试题! 前言 今年有个现象,实时数仓建设突然就被大家所关注.我个人在公众号也写过和转载过几篇关于实时数据仓库的文章和方案. 但是 ...

  8. 当 TiDB 与 Flink 相结合:高效、易用的实时数仓

    简介:利用实时数仓,企业可以实现实时 OLAP 分析.实时数据看板.实时业务监控.实时数据接口服务等用途.但想到实时数仓,很多人的第一印象就是架构复杂,难以操作与维护.而得益于新版 Flink 对 S ...

  9. 数据查询和业务流分开_数据仓库介绍与实时数仓案例--阿里

    1.数据仓库简介 数据仓库是一个面向主题的(Subject Oriented).集成的(Integrate).相对稳定的(Non-Volatile).反映历史变化(Time Variant)的数据集合 ...

最新文章

  1. 第11章 假如没有编程 《丰富多彩的编程世界》
  2. android应用程序的混淆打包(转)
  3. c语言0x00如何不截断_binary 和 varbinary 用法全解
  4. NLP多任务学习:一种层次增长的神经网络结构 | PaperDaily #16
  5. spring boot:创建一个简单的web(maven web project)
  6. SAP智能机器人流程自动化解决方案
  7. SAP Engagement Center的ShellCarousel控件control
  8. 目标检测系列(三)——SPPnet
  9. 属性的表示方法和对象的枚举
  10. 电脑上win是哪个键_电脑按哪个键是切换拼音输入法
  11. python多进程爬虫保存数据_Python多进程爬虫东方财富盘口异动数据+Python读写Mysql与Pandas读写Mysql效率对比...
  12. android多个网络请求如何依次执行,Android 并发和串行网络请求
  13. 前端学习笔记day14 移动盒子 封装函数
  14. 4412的linux启动原理,友坚科技三星4412开发板Linux平台下UT4412BV03裸机开发指南(十一)...
  15. MySQL笔记4——SQL去重/笛卡尔积现象
  16. solidworks鼠标中键设置
  17. 【网页设计】期末大作业html+css(B站首页 1页 带js轮播)
  18. matlab中sqp的算法原理_最优化方法及其Matlab程序设计 马昌凤
  19. 机器学习入门 --- 贝叶斯 - 中文新闻分类任务
  20. uni-app 超好用的时间选择器组件(起止时间)

热门文章

  1. 蓝牙技术简介(英语演讲)
  2. 理解Rao - Cramer不等式
  3. 论文笔记(十四):PoseRBPF: A Rao–Blackwellized Particle Filter for 6-D Object Pose Tracking
  4. Python:统计数字
  5. steamlink无法连接_Steam Link如果解决这两个问题,我们将一脚踏入云游戏时代
  6. Easy EDA #学习笔记01# | STC89C51单片机最小系统(8位单片机)
  7. 国际化常见快捷登录总结:使用 Google、Facebook 等三方平台实现快速登录
  8. 城市长大隧道交通安全应急设计典型问题及对策
  9. 2021浙江高考成绩查询登不进,2021年浙江高考成绩查询官网查分网址:https://www.zjzs.net/...
  10. Oracle数据库编程