数仓架构:离线数仓、实时数仓Lambda和Kappa、湖仓一体数据湖

ops/2024/10/21 5:35:14/

往期推荐

大数据HBase图文简介-CSDN博客

数仓分层ODS、DWD、DWM、DWS、DIM、DM、ADS-CSDN博客

数仓常见名词解析和名词之间的关系-CSDN博客

=========================================================================

目录

往期推荐

1. 数仓架构

1.1 离线数仓架构

1.1.1 数据集市架构

1.1.1.2 独立数据集市

1.1.1.2 从属数据集市

1.1.2 Inmon企业信息工厂架构

1.1.3 Kimball数据仓库架构

1.1.4 混合型数据仓库架构

1.2 实时数仓架构 

1.2.1 Lambda架构

1.2.1.1 传统的Lambda实时开发

1.2.1.2 升级的Lambda实时开发

1.2.1.3 为什么Lambda架构同时存在流处理和批处理?

1.2.1.4 Lambda架构缺点

1.2.2 Kappa架构

1.2.2.1 Kappa架构缺点 

1.2.3 Kappa和Lambda对比

1.2.4 湖仓一体—数据湖 

=========================================================================

1. 数仓架构

数仓架构大致分为离线数仓架构和实时数仓架构数仓架构可以简单理解为构成数仓的各层关系,如ODS、DWM、DWD、DWS,具体分层这里不赘述。 

1.1 离线数仓架构

显而易见,这种架构不能处理实时数据,那么必然会有数据的流失。

任何事物都是随着时间的演进变得越来越完善,当然也是越来越复杂,数仓也不例外。

离线数仓架构包括数据集市架构、Inmon企业信息工厂架构、Kimball数据仓库架构、混合型数据仓库架构,接下来就详细说说这几种架构。

1.1.1 数据集市架构

数据集市架构重点在于集市二字,数据集市是按主题域组织的数据集合,用于支持部门级的决策。有两种类型的数据集市:独立数据集市 和 从属数据集市。

1.1.1.2 独立数据集市

独立数据集市集中于部门所关心的单一主题域数据以部门为基础,例如制造部门、人力资源部门和其他部门都各自有他们自己的数据集市。

  • 优点:因为一个部门的业务相对于整个企业要简单,数据量也小得多,所以部门的独立数据集市周期短、见效快
  • 缺点:独立数据集市各自为政。从业务角度看,当部门的分析需求扩展或者跨部门跨主题域分析时,独立数据市场会力不从心。 当数据存在歧义,比如同一个产品在A部门和B部门的定义不同,将无法在部门间进行信息比较。 每个部门使用不同的技术,建立不同的ETL的过程,处理不同的事务系统,而在多个独立的数据集市之间还会存在数据的交叉与重叠,甚至会有数据不一致的情况!

1.1.1.2 从属数据集市

从属数据集市的数据来源于数据仓库,即从属于数据仓库

优点:

  • 性能:当数据仓库的查询性能出现问题,可以考虑建立几个从属数据集市,将查询从数据仓库移出到数据集市。
  • 安全:每个部门可以完全控制他们自己的数据。
  • 数据一致:因为每个数据集市的数据来源都是同一个数据仓库有效消除了数据不一致的情况。

1.1.2 Inmon企业信息工厂架构

  • Inmon架构是范式建模
  • 企业级数据仓库是企业级别的,正如Inmon数据仓库所定义的,企业级数据仓库是一个细节数据的集成资源库。其中的数据以最低粒度级别被捕获,存储在满足三范式设计的关系数据库中。
  • 部门级数据集市是企业中部门级别的,是面向主题数据的部门级视图,数据从企业级数据仓库获取。数据在进入部门数据集市时可能进行聚合。数据集市使用多维模型设计,用于数据分析。重要的一点是,所有的报表工具、BI 工具或其他数据分析应用都应该从数据集市查询数据,而不是直接查询企业级数据仓库

1.1.3 Kimball数据仓库架构

  • 对比上一张图可以看到,Kimball与Inmon两种架构的主要区别在于数据仓库的设计和建立。 Kimball的数据仓库包含高粒度的企业数据,使用多维模型设计,是维度建模,这也意味着数据仓库星型模式的维度表和事实表构成。分析系统或报表工具可以直接访问多维数据仓库里的数据。
  • 在此架构中的数据集市也与Inmon中的不同。这里的数据集市是一个逻辑概念,只是多维数据仓库中的主题域划分,并没有自己的物理存储,也可以说是虚拟的数据集市

1.1.4 混合型数据仓库架构

  • 所谓的混合型结构,指的是在一个数据仓库环境中,联合使用Inmon和Kimball两种架构。
  • 从架构图可以看到,这种架构将Inmon方法中的数据集市替换成了一个多维数据仓库,而数据集市则是多维数据仓库上的逻辑视图
  • 使用这种架构的好处是:既可以利用规范化设计消除数据冗余,保证数据的粒度足够细;又可以利用多维结构更灵活地在企业级实现报表和分析。

1.2 实时数仓架构 

在某些场景中,数据的价值随着时间的推移而逐渐减少。所以在传统大数据离线数仓的基础上,逐渐对 数据的实时性提出了更高的要求。

1.2.1 Lambda架构

1.2.1.1 传统的Lambda实时开发

上述架构,在实时计算链路中,如果存在多个实时业务,每个业务都要对自己的数据进行数据清洗等操作,而数据清洗这操作是重复的。所以对其进行了如下优化,提高数据复用

1.2.1.2 升级的Lambda实时开发

对实时链路进行数据分层,改成实时数仓,解决了数据复用的问题,可以对数据进行统一清洗等操作。

1.2.1.3 为什么Lambda架构同时存在流处理和批处理?
  • 假如整个系统只有一个批处理层,会导致用户必须等待很久才能获取计算结果,一般有时间延迟。电商数据分析部门只能查看前一天的统计分析结果,无法获取当前的结果,这对于实时决策来说有 一个巨大的时间鸿沟,很可能导致管理者错过最佳决策时机。
  • Lambda架构属于较早的一种架构方式,早期的流处理不如现在这样成熟,在准确性、扩展性和容错性 上,流处理层无法直接取代批处理层,只能给用户提供一个近似结果,还不能为用户提供一个一致准确的结果。因此Lambda架构中,出现了批处理和流处理并存的现象。 

1.2.1.4 Lambda架构缺点

不管是传统的还是升级后的Lambda架构,严格来说并不是纯正的实时数仓,而是离线+实时!这就导致Lambda有如下缺点:

  • 同样的需求要开发两套一样的代码,比如批处理要统计昨天一天的人数,流处理要统计实时在线人数,都是统计人数,却要开发两套代码。
  • 跑两套相同的代码,集群资源使用增多
  • 离线结果和实时结果可能不一致,当然以离线为主
  • 离线批量计算T+1可能算不完,数据量大
  • 服务器存储压力大

既然离线数仓占用计算压力大,存储压力大,那就不使用离线,使用纯实时的kappa架构

1.2.2 Kappa架构

1.2.2.1 Kappa架构缺点 
  • 只支持流处理,没有批处理
  •  使用kafka进行消息缓存,kafka不支撑海量数据存储,数据存储也有时间限制
  • kafka不支持OLAP,即无法用SQL语句进行简单的数据校验
  • 无法复用数据血缘管理体系(数据治理),因为kafka没有schema那种字段
  • kafka中的数据是append追加,不支持数据的更新、插入

1.2.3 Kappa和Lambda对比

1.2.4 湖仓一体—数据湖 

基于Lambda和Kappa架构的缺点,出现了批流一体

  • 从架构角度来看类似Lambda架构,批流一体既可以处理批数据,又可以处理流数据;
  • 从计算框架角度来看,就是flink、spark框架,既支持批处理,又支持流处理;
  • 从SQL角度来看,就是数仓各层统一支持SQL,这就弥补了kappa中kafka不支持SQL的缺点;
  • 从存储层面来看,能做到海量数据的存储,而不是像kappa一样存储在kafka缓存中;

Kafka 换成了 Iceberg,IceBerg就是数据湖技术的一种,介于上层计算引擎和底层存储格式之间的一个中间层,我们可以把它定义成一种“数据组织格式”,底层存储还是 HDFS。除此之外数据湖还有Hudi(发展最完善)这里不具体阐述。

数据湖支持SQL查询,解决了如下问题:

  • 存储统一
  • 底层存储是HDFS,解决了kafka存储量小,数据有时间限制的问题
  • 任意分层都可以OLAP(支持SQL查询)
  • Iceberg有Schema概念,可以追踪数据的血缘关系(数据治理)
  • 支持数据实时更新,数据可以update/insert

http://www.ppmy.cn/ops/103923.html

相关文章

Java JAR命令打包详解与坑点

一、背景 同事从第三方厂家得到了jar包,但是由于里面的一个java代码逻辑需要自己适配,在拿到源代码以后,修改了一点逻辑,最后编译生成新的class文件。我们暂且把这个文件叫Business.class。 原jar能直接运行,没有任何问…

uniapp分包

分包是指将一个大的应用程序拆分成多个小的、可以独立加载的部分。这样做的好处是可以显著减少初次加载时的数据量,从而加快启动速度,节省存储空间。 分包的实现方法 1. 配置分包 在manifest.json文件中定义分包配置。 {"pages": ["p…

Linux 数据结构 顺序表 链表

数据结构: 1.衡量一个程序是否优秀: 1.时间复杂度: 数据量增长与程序运行时间的比例关系以函数描述称为时间渐进复杂度函数,简称时间复杂度 O(c) > O(logn) > O(n) > O(nlogn) > O(n^2) > O(n^3) > O…

【电力系统】使用电力系统稳定器 (PSS) 和静态 VAR 补偿器 (SVC) 提高瞬态稳定性

摘要 电力系统在面对故障和扰动时,其瞬态稳定性是确保系统安全运行的关键因素。本文探讨了通过使用电力系统稳定器(PSS)和静态VAR补偿器(SVC)来提高电力系统瞬态稳定性的策略。通过仿真分析,证明了PSS和SV…

EmguCV学习笔记 VB.Net 8.4 pyrMeanShiftFiltering

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

css加载一张图片 设置整个页面背景

前言 在css中,可以使用background-image或background属性来加载图片。这两个属性都可以配合url()函数来为元素设置背景图像。background-image属性为元素设置背景图像,而background是一个简化属性,可以在一个声明中设置所有背景样式&#xf…

使用终端工具Tabby(跳板机)连接ssh

目录 1.tabby下载2.下载安装3.安装成功3.1在应用中配置语言为中文3.2外观可以更改字体大小颜色等3.3配色方案改变外观颜色3.4快捷键,可以根据自己的习惯自定义修改3.5配置和连接(最重要的,安装完成要连接ssh可以直接到这一步) 1.t…

动态IP池在数据抓取中的应用与优势

随着互联网技术的快速发展,数据抓取(Web Scraping)已经成为获取互联网信息的重要手段。然而,在进行大规模数据抓取时,往往会遇到反爬虫机制、IP封禁等问题。动态IP池作为一种解决方案,可以有效地绕过这些障…