往期推荐
=========================================================================
目录
[1. 数仓架构](#1. 数仓架构)
[1.1 离线数仓架构](#1.1 离线数仓架构)
[1.1.1 数据集市架构](#1.1.1 数据集市架构)
[1.1.1.2 独立数据集市](#1.1.1.2 独立数据集市)
[1.1.1.2 从属数据集市](#1.1.1.2 从属数据集市)
[1.1.2 Inmon企业信息工厂架构](#1.1.2 Inmon企业信息工厂架构)
[1.1.3 Kimball数据仓库架构](#1.1.3 Kimball数据仓库架构)
[1.1.4 混合型数据仓库架构](#1.1.4 混合型数据仓库架构)
[1.2 实时数仓架构](#1.2 实时数仓架构)
[1.2.1 Lambda架构](#1.2.1 Lambda架构)
[1.2.1.1 传统的Lambda实时开发](#1.2.1.1 传统的Lambda实时开发)
[1.2.1.2 升级的Lambda实时开发](#1.2.1.2 升级的Lambda实时开发)
[1.2.1.3 为什么Lambda架构同时存在流处理和批处理?](#1.2.1.3 为什么Lambda架构同时存在流处理和批处理?)
[1.2.1.4 Lambda架构缺点](#1.2.1.4 Lambda架构缺点)
[1.2.2 Kappa架构](#1.2.2 Kappa架构)
[1.2.2.1 Kappa架构缺点](#1.2.2.1 Kappa架构缺点)
[1.2.3 Kappa和Lambda对比](#1.2.3 Kappa和Lambda对比)
[1.2.4 湖仓一体---数据湖](#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