离线数仓和实时数仓的区别数据源服务器数据仓库olaphdfs

这些年来,数仓架构不断演变发展,如今数据仓库的概念越来越精确。本文对离线数仓与实时数仓的区别进行了解析,并总结了实时数仓建设的思路与趋势,希望对你有所启发。

01数仓架构演变

20世纪70年代,MIT(麻省理工)的研究员致力于研究一种优化的技术架构,该架构试图将业务处理系统和分析系统分开,即将业务处理和分析处理分为不同层次,针对各自的特点采取不同的架构设计原则,MIT的研究员认为这两种信息处理的方式具有显著差别,以至于必须采取完全不同的架构和设计方法。但受限于当时的信息处理能力,这个研究仅仅停留在理论层面。

1991年,比尔·恩门(BillInmon)出版了他的第一本关于数据仓库的书《BuildingtheDataWarehouse》,标志着数据仓库概念的确立。该书定义了数据仓库非常具体的原则,这些原则到现在仍然是指导数据仓库建设的最基本原则。比尔·恩门(BillInmon)主张自上而下的建设企业级数据仓库EDW(EnterpriseDataWarehouse),这个过程中信息存储符合第三范式,结构如下:

由于企业级数据仓库的设计、实施很困难,很重要的原因是因为其数据模型设计,在企业级数据仓库中,Inmon推荐采用3范式进行数据建模,从而无法支持决策支持(DSS-DecisionSuportSystem)系统的性能和数据易访问性的要求,即:数据存储方式严格按照范式建模方式,导致数据分析效率低下。

很多公司按照这种方式构建数据仓库遭到失败。同时期,拉尔夫·金博尔(RalphKimball)提出自下而上的建立数据仓库,整个过程中信息存储采用维度建模而非三范式,思路如下:

维度建模方式没有采用三范式方式设计存储数据,适用于数据分析场景,以上设计方式构建数据仓库实施难度大大降低,并且能够满足公司内部部分业务部门的迫切需求,在初期获得了较大成功。但是很快,他们也发现自己陷入了某种困境:随着数据集市的不断增多,这种架构的缺陷也逐步显现,公司内部独立建设的数据集市由于遵循不同的标准和建设原则,以致多个数据集市的数据混乱和不一致,解决以上问题,还需回归到范式建模。

1998年,BillInmon提出了新的BI架构CIF(Corporationinformationfactory),CIF的核心是将数仓架构划分为不同的层次以满足不同场景的需求,比如常见的ODS、DW、DM等,每层根据实际场景采用不同的建设方案,现在CIF已经成为建设数据仓库的框架指南。

随着时代的发展,到今天数据仓库建设理论也是基于CIF架构建设方案演化而来。同时数据仓库的概念越来越精确,数据仓库定义如下:

数据仓库,DataWarehouse,可简写为DW或DWH。数据仓库是面向主题的、集成的(非简单的数据堆积)、相对稳定的、反应历史变化的数据集合,数仓中的数据是有组织有结构的存储数据集合,用于对管理决策过程的支持。

1.1传统离线大数据架构

21世纪初随着互联网时代的到来,数据量暴增,大数据时代到来。Hadoop生态群及衍生技术慢慢走向“舞台”,Hadoop是以HDFS为核心存储,以MapReduce(简称MR)为基本计算模型的批量数据处理基础设施,围绕HDFS和MR,产生了一系列的组件,不断完善整个大数据平台的数据处理能力,例如面向KV操作的HBase、面向SQL分析的Hive、面向工作流的PIG等。以Hadoop为核心的数据存储及数据处理技术逐渐成为数据处理中的“中流砥柱”,部分技术栈如下图所示:

这个时期,在企业信息化的过程中,随着信息化工具的升级和新工具的应用,数据量变的越来越大,数据格式越来越多,决策要求越来越苛刻,数据仓库技术在大数据场景中被广泛使用。

大数据中的数据仓库构建就是基于经典数仓架构而来,使用大数据中的工具来替代经典数仓中的传统工具,架构建设上没有根本区别。在离线大数据架构中离线数仓结构如下:

随着数据处理能力和处理需求的不断变化,越来越多的用户发现,批处理模式无论如何提升性能,也无法满足一些实时性要求高的处理场景,流式计算引擎应运而生,例如Storm、SparkStreaming、Flink等。

以上离线大数据架构不能够处理实时性业务,早期,很过公司都是基于Storm来处理处理实时性比较强的业务场景,随着越来越多的应用上线,大家发现,其实批处理和流计算配合使用,才能满足大部分应用需求。而对于用户而言,其实他们并不关心底层的计算模型是什么,用户希望无论是批处理还是流计算,都能基于统一的数据模型来返回处理结果,于是Lambda架构被提出。

1.2Lambda架构

在Lambda架构中,为了计算一些实时指标,就在原来的离线数仓基础之上增加了一个实时计算的链路,并对数据源做流式改造:把消息发送到消息队列中(大数据中常用Kafka),实时计算去消费消息队列中的数据,完成实时指标计算,推送到下游的数据服务中去,由数据服务层完成离线与实时结果的合并。

根据实时业务统计的复杂程度Lambda架构也分为以下两种情况。

(1)离线数据+实时处理链路(传统实时开发)

根据实时链路中实时指标计算的复杂程度,开始实时业务不复杂,都是“烟囱(cong)式”开发设计,不需要构建实时数仓,我们可以选择不分层,这种场景下Lambda架构中是由离线数仓和实时业务处理部分组成,这部分实时还达不到叫做实时数仓阶段,只能叫做实时处理链路,其结构如下:

注意:“烟囱式”开发:在一个有一定规模的企业中,通常都会存在各种各样的应用系统,它们分别由企业的各个不同部门、在各种不同历史时期、为满足各种不同业务目的而开发。由于数据格式没有统一规范,相互之间没有联通、数据更没有整合,像一个个烟囱,因此称其为“烟囱式系统”。同样,在数据处理过程中,各个数据处理程序之间不能很好做到数据规范统一、处理数据流程统一、数据复用,各自独立,叫做“烟囱式”开发。

(2)离线数仓+实时数仓

随着企业实时业务增多,统计的实时指标越来越多,复杂程度也越来越高,为了在实时链路中更好的复用数据,这是就有必要在实时链路中加入数据分层设计,构建真正的实时数仓。这种场景下Lambda架构中是由离线数仓和实时数仓两部分组成,其结构如下:

以上Lambda架构中“实时处理链路”这种传统实时与“实时数仓”区别在于,传统实时“烟囱式”开发导致代码耦合问题严重,当需求越来越多,有时需要明细数据,有时需要OLAP分析,这种模式难以应付这些需求,缺少完善的规范。“实时数仓”在保证数据实时性的前提下,实现了数据基于数据仓库管理,更加统一规范化,稳定性和业务性更强。

在Lambda架构中流处理计算的指标批处理依然计算,最终以批处理结果为准,即每次批处理计算后会覆盖流处理的结果,这是由于流处理过程中不完善做的折中办法,由数据服务处理,其功能主要是合并离线计算和实时计算结果。

例如:在统计实时交易订单时,可能实时统计的结果需要当日分钟级别向外展示,T+1后才能展示昨日总的交易订单数,显然,后者是T+1每日离线批处理统计结果,那么假设当日有些用户进行了订单取消有可能T+1后统计统计结果与当日实时展示数据出现不一致问题,那么这里就需要使用数据服务来进行处理,统一数据,决定如何使用数据。

Lambda数据架构成为每一个公司大数据平台必备的架构,它解决了一个公司大数据批量离线处理和实时数据处理的需求。Lambda架构的核心理念是“流批一体”,如上图所示,整个数据流向自左向右流入平台。进入平台后一分为二,一部分走批处理模式,一部分走流式计算模式。

1)同样的需求需要开发两套一样的代码

这是Lambda架构最大的问题,针对同一个需求需要开发两套代码,一个在批处理引擎上实现,一个在流处理引擎上实现,在写好代码后还需构造数据测试保证两者结果一致,另外,两套代码对于后期维护也非常麻烦,一旦需求变更,两套代码都需要修改,并且两套代码也需同时上线。

2)集群资源使用增多

同样的逻辑需要计算两次,整体占用资源会增多。虽然离线部分是在凌晨运行,但是有可能任务多,在凌晨时造成集群资源使用暴增,报表产出效率就有可能下降,报表延迟对后续展示也有影响。

3)离线结果和实时结果不一致

在此架构中经常我们看到次日统计的结果比昨晚的结果要少,原因就在于次日统计结果和昨日统计结果走了两条线的计算方式:次日统计结果是按照批处理得到了更为准确的批量处理结果。昨晚看的结果是通过流式运行的结果,依靠实时链路统计出的实时结果(实时结果统计累加),牺牲了部分准确性。对于这种来自批量和实时的数据结果对不上的问题,无解。

4)批量计算T+1可能计算不完

随着物联网时代的到来,一些企业中数据量级越来越大,经常发现夜间运行批量任务已经无法完成白天20多个小时累计的数据,保证早上上班前准时出现数据已成为部分大数据团队头疼的问题。5)服务器存储大

由于批流两个过程都需要将数据存储在集群中,并且中间也会产生大量临时数据,会造成数据急速膨胀,加大服务器存储压力。

1.3Kappa架构

Kappa架构的核心思想是通过改进流计算系统来解决数据全量处理的问题,使得实时计算和批处理过程使用同一套代码。此外Kappa架构认为只有在有必要的时候才会对历史数据进行重复计算,而如果需要重复计算时,Kappa架构下可以启动很多个实例进行重复计算,方式是通过上游重放完成(从数据源拉取数据重新计算)。

Kappa架构构建的数仓当之无愧称为实时数仓,Kappa架构最大的问题是流式重新处理历史的吞吐能力会低于批处理,但这个可以通过增加计算资源来弥补。重新处理数据看似比较麻烦,但在Kappa架构中并不复杂,其步骤如下:

另外,Kappa架构并不是中间结果完全不落地,现在很多大数据系统都需要支持机器学习(离线训练),所以实时中间结果需要落地对应的存储引擎供机器学习使用,另外有时候还需要对明细数据查询,这种场景也需要把实时明细层写出到对应的引擎中。Kappa架构也有一定的缺点,其缺点例如:Kappa架构由于采集的数据格式不统一,每次都需要开发不同的Streaming程序,导致开发周期长。更多Kappa架构的问题在实时数仓发展趋势中讨论。

1.4混合结构

传统离线大数据架构已经不能满足一些公司中实时业务需求,因为随着互联网及物联网发展,越来越多的公司多多少少涉及一些流式业务处理场景。由Lambda离线数仓+实时数仓架构到Kappa实时数仓架构,都涉及到实时数仓开发,那么现实业务开发中到底使用Lambda架构还是Kappa架构?我们可以先看下以上三个架构之间的区别:

通过以上对比来看,三者对比结果如下:从架构上来看,三套架构有比较明显区别,真正的实时数仓以Kappa架构为主,而离线数仓以传统离线大数据架构为主,Lambda架构可以认为是两者的中间态。目前在业界中所说的实时数仓大多是Lambda架构,这是由需求决定的。

从数据保障上来看,实时数仓因为要保证实时性,所以对数据量的变化较为敏感,在大促等场景下需要提前做好压测和主备保障工作,这是与离线数仓较为明显的一个区别。

目前在一些没有实时数据处理场景公司中,使用传统离线大数据架构居多,在这些公司中离线大数据架构性价比高,比较实用。

在一些涉及到实时业务场景的公司,在实际工作中到底选择哪种架构,需要根据具体业务需求来决定。很多时候并不是完全规范的Lambda架构或者Kappa架构,可以是两者的混合,比如大部分实时指标统计使用Kappa架构完成计算,少量关键指标使用Lambda架构用批处理重新计算,增加一次校对过程。为了应对更广泛的场景,大多数公司采用这种混合架构,离线和实时数据链路都存在,根据每个业务需求选择在合适的链路上来实现。

注意:这种方式并不是Lambda架构,例如:某企业有多个业务模块,某些业务模块需要运行在Lambda架构中,某些业务模块需要运行在Kappa架构中。

02离线数仓与实时数仓区别

离线数据与实时数仓区别如下:

03实时数仓建设思路

在实时数仓中计算框架选型建议优先选择Flink,其具有“流批一体”特性,并且在处理复杂业务场景上性能优异,在实时处理中有逐渐替代spark的趋势。

在数据存储选型中首要考虑查询效率,其次是插入、更新等问题,这里说的存储时最终计算数据结果的存储,可选择ClickHouse、Hbase、apacheDruid、Redis等,频繁更新的数据建议不要采用ClickHouse与Druid。当然存储这块需要具体问题具体分析,不同场景下hbase、redis等都是可选项。

04实时数仓发展趋势4.1实时数仓现状

当前基于Hive的离线数据仓库已经非常成熟,随着实时计算引擎的不断发展以及业务对于实时报表的产出需求不断膨胀,业界最近几年就一直聚焦并探索于实时数仓建设。根据数仓架构演变过程,在Lambda架构中含有离线处理与实时处理两条链路,其架构图如下:

正是由于两条链路处理数据导致数据不一致等一些列问题所以才有了Kappa架构,Kappa架构如下:

Kappa架构可以称为真正的实时数仓,目前在业界最常用实现就是Flink+Kafka,然而基于Kafka+Flink的实时数仓方案也有几个非常明显的缺陷,所以在目前很多企业中实时数仓构建中经常使用混合架构,没有实现所有业务都采用Kappa架构中实时处理实现。Kappa架构缺陷如下:

这部分更新需求无法使用Kafka实现。

所以实时数仓发展到现在的架构,一定程度上解决了数据报表时效性问题,但是这样的架构依然存在不少问题,随着技术的发展,相信基于Kafka+Flink的实时数仓架构也会进一步往前发展,那么到底往哪些方向发展,我们可以结合大公司中技术选型可以推测实时数仓的发展大致会走向“批流一体”。

4.2批流一体

最近一两年中和实时数仓一样火的概念是“批流一体”,那么到底什么是“批流一体”?在业界中很多人认为批和流在开发层面上都统一到相同的SQL上处理是批流一体,也有一些人认为在计算引擎层面上批和流可以集成在同一个计算引擎是批流一体,比如:Spark/SparkStreaming/StructuredStreaming/Flink框架在计算引擎层面上实现了批处理和流处理集成。

以上无论是在业务SQL使用上统一还是计算引擎上的统一,都是批流一体的一个方面,除此之外,批流一体还有一个最核心的方面就是存储层面上的统一。这个方面上也有一些流行的技术:delta/hudi/iceberg,存储一旦能够做到统一,例如:一些大型公司使用Iceberg作为存储,那么Kappa架构中很多问题都可以得到解决,Kappa架构将变成个如下模样:

这条架构中无论是流处理还是批处理,数据存储都统一到数据湖Iceberg上,这一套结构将存储统一后,解决了Kappa架构很多痛点,解决方面如下:

上述架构也可以认为是Kappa架构的变种,也有两条数据链路,一条是基于Spark的离线数据链路,一条是基于Flink的实时数据链路,通常数据都是直接走实时链路处理,而离线链路则更多的应用于数据修正等非常规场景。这样的架构要成为一个可以落地的实时数仓方案、可以做到实时报表产生,这得益于Iceberg技术:

(1)支持流式写入-增量拉取

(2)解决小文件多的问题

(3)支持批量以及流式的Upsert(Delete)功能

(4)支持比较完整的OLAP生态

比如支持Hive/Spark/Presto/Impala等OLAP查询引擎,提供高效的多维聚合查询性能。目前Iceberg部分功能还在开发中,有一些功能还不完善,但是整体实时数仓的发展会大致朝着这个方向行进。目前业界大多数公司还是处于Lambda架构,使用Kappa架构的公司一般都是实时业务居多的公司,随着数据湖技术的发展,这些公司实时数仓的构建慢慢会走向最终的“批流一体”。

专栏作家

一个数据人的自留地,公众号:一个数据人的自留地。人人都是产品经理专栏作家,《数据产品经理修炼手册》作者。

本文原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议。

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。

THE END
1.重新定义数字时代的差距与连接,探索在线与离线的新境界摘要:本文探讨了数字时代的差距与连接问题。随着互联网的普及,人们之间的距离似乎变得越来越近,但同时也存在着不可忽视的差距。本文将分析这种差距的来源,并探讨如何通过新的方式重新定义数字时代的连接,以实现更加平等和高效的https://hnjwwzy.cn/post/223.html
2.离线编程操作,优势应用与未来离线编程技术,离线编程操作,优势在数字化和智能化的时代,编程技术已经渗透到各个领域,无论是软件开发、机器人控制还是自动化生产等,都离不开编程的影子,离线编程操作作为一种新兴的编程方式,逐渐在各个领域中崭露头角,本文将详细介绍离线编程操作的概念、优势、应,天纯雾芯科技http://www.skypure.com.cn/post/35344.html
3.QQ中的4G在线标志,技术原理与含义解析五金交电摘要:,,本文探讨了QQ上4G在线的含义及其技术原理。4G在线是QQ状态的一种显示,表示用户当前使用的设备正在通过4G网络连接到QQ。背后的技术原理涉及到移动网络的演进和QQ软件的功能设计。通过了解4G网络的高速数据http://xjxygt.cn/post/15467.html
4.工作中最常用的8种设计模式程序员小2的技术博客以支付系统为例,不同支付方式需要不同的对象。 public class PaymentFactory { public static Payment createPayment(String type) { switch (type) { case "AliPay": return new AliPay(); case "WeChatPay": return new WeChatPay(); default: https://blog.51cto.com/u_6813689/12872085
5.实时在线方式和离线方式的含义是什么?【题目】 实时、 在线方式和离线方式的含义是什么? 搜题找答案>08241计算机控制系统试题答案>试题详情 【题目】实时、 在线方式和离线方式的含义是什么? 纠错 查看答案 查找其他问题的答案?https://www.zikaosw.cn/daan/18588476.html
6.实时在线方式和离线方式的含义是什么?4.问答题什么是分布式I/O模块? 参考答案:由I/O模块和具有通信功能的数据处理模块构成,符合一定的通信协议,可放在现地控制单元本体以外一定的距离处,以通信方式实现 点击查看完整答案 5.问答题什么是现场总线系统?它由哪几层构成? 参考答案:现场总线是在现地主要自动化装置和控制层的自动化设备之间,通过共用通http://www.ppkao.com/tiku/shiti/1963998.html
7.微信在线不在线的区别是什么?有什么方法知道好友是否在线?几年前,我们常用的聊天软件是qq,而现在,微信的风头几乎已经改过了qq。微信在很多功能方面和qq类似,不过,也有些不一样的功能。比如,微信在线与不在线,很多人都不知道这两者有什么区别,下面,我们来看看具体的情况。 其实微信是不能看好友在不在线的,这是微信的一个特点,就是没有在线与离线。也就是说,在线与不https://www.kaitao.cn/article/20180906115708.htm
8.在线刷卡和离线刷卡有什么区别在线刷卡和离线刷卡(在线刷卡机在线刷卡和离线刷卡各有其特点和优势。在线刷卡以其方便快捷、支持多种支付方式等优势,在在线支付领域占据重要地位;而离线刷卡(特别是数字人民币等新型支付方式中的离线支付功能)则以其不受网络限制、安全性高等特点,在某些特定场景下具有独特的优势。用户可以根据自己的实际需求和偏好,选择最适合自己的支付方式。 https://www.jianshu.com/p/b9e5e87eb2d3
9.一文读懂「PromptEngineering」提示词工程基础版2.2 交互方式分类:在线提示和离线提示 在线提示(Online prompt)是在与模型的实时互动中提供的提示,通常用于即时的交互式应用。这种提示在用户与模型进行实际对话时提供,用户可以逐步输入、编辑或更改提示,在在线聊天、语音助手、实时问题回答等应用中常见。 https://download.csdn.net/blog/column/12545383/135497369
10.比特币钱包存储路径(比特币钱包存储路径是什么)比特币钱包存储路径是什么 比特币钱包是一种数字货币钱包,用于存储和管理比特币(Bitcoin)以及其他加密货币。它通常由一个软件应用程序提供,并且使用一组加密保护私钥和公钥的算法来创建、存储和访问用户的加密货币。 比特币钱包的存储方式 比特币钱包的存储方式可以分为两种:在线钱包和离线钱包。 1. 在线钱包 在线钱包https://www.528btc.com/e/action/ShowInfo.php?classid=38&id=91419
11.在对齐AI时,为什么在线方法总是优于离线方法?澎湃号·湃客最重要的是,在线 RLHF 算法依赖于一个学习后的奖励模型,该奖励模型是使用与离线 RLHF 算法一样的成对偏好数据集训练得到的。这与常规强化学习设置存在根本性差异 —— 常规强化学习假设能以在线方式获取基本真值奖励,在这种情况下,在线强化学习的优势明显。假设 RLHF 受到奖励信号的瓶颈限制,我们就不清楚在线与离线https://www.thepaper.cn/newsDetail_forward_27434433
12.怎样兑换日元到人民币转账以及找出最便宜和最好的付款方式?有哪些在线支付的方式? 支付已经成为我们生活中不可缺少的一部分,尤其是在当今金融科技发展的时代,跨境汇款行业也随之获益,传统的离线支付方式也逐渐迈入在线化。 首先,信用卡是一种比较常见的传统支付方式,它允许用户通过网络进行支付,而不需要面对传统的汇款流程。这种支付方式可以大大缩短客户的支付过程,节省大量时间https://item.pandaremit.com/article/3979.html
13.什么是抖音飞鸽离线留言?如何处理留言?三、离线留言如何处理? 离线留言的处理分为手动和自动两种方式: 1、手动处理 在留言界面下,选择对应的离线留言,分配给客服处理即可; 2、离线留言自动分配 在【设置】-【在线客服】选项下,打开离线会话系统自动分配功能。系统会在客服上线且有空的时候,自动将离线会话分配给客服,跟进处理,无需商家再手动操作。 https://www.mmker.cn/article/12775.html
14.实时,在线方式和离线方式的含义是什么?20岁,女性,人院前2周间歇性发热并有寒战,夜间体温39℃。发热期间左腹股沟有疼痛、肿胀。伴食欲缺乏,恶心、呕吐,时有咳嗽。体检左腹股沟有3cm×5cm肿块,肝、脾略肿大,腹部见玫瑰疹。血白细胞1.5×109 /L,中性粒细胞0.70×109/L,淋巴细胞0.36×109 /L,单核细胞0.04×109 /L。肝功正常,腹股沟https://www.shuashuati.com/ti/1d46a43729e74fce9d6abaf97383d863.html
15.QQ状态同步究竟是推还是拉?问题四:轮询拉取群友状态也会给服务器带来过大的压力,还有什么优化方式? 回答: 群友的数据量太大,虽然每个用户平均加入了20个群,但实际上并不会每次登录都进入每一个群。不采用轮询拉取,而采用按需拉取,延时拉取的方式,在真正进入一个群时才实时拉取群友的在线状态,是既能满足用户需求(用户感觉是状态是实时https://www.w3cschool.cn/architectroad/architectroad-qq-status-consistency.html
16.IDEA如何安装lombok插件(在线和离线两种方式)IDEA离线安装lombok 有时候公司网络被限制的时候在线安装不会成功,同样可以采用离线的方式进行安装。 插件下载:lombok-plugin-0.16-2017.1.zip 1、定位File->Settings->Plugins 2、点击 Install plugin form disk 3、选择离线包所在的硬盘位置 4、点击确定,点击Apply 5、重启IDEA 重启之后在需要的JavaBean上使用lomb..https://www.pianshen.com/article/1377740150/
17.云盘扩容,离线扩容和在线扩容有什么区别,扩容时需要关机吗?阿里云提供了两种方式进行云盘扩容:在线扩容和离线扩容。在线扩容的优点在于扩容完成后无需重启实例,这https://developer.aliyun.com/ask/570725
18.法学:电子商务法律法规考试题库(考试必看)考试题库A.只是交易方式的电子化 B.其交易过程一般是在线订货、支付 C.其交易过程一般是离线送货 D.其交易过程一般是在线订货、支付和送货 点击查看答案 39、填空题 广义的电子商务是指所有利用()和()进行的商业贸易活动。 点击查看答案 40、名词解释 完全独立的服务器 点击查看答案 41、多项选择题 数据库特殊权利,http://www.91exam.org/exam/87-1478/1478378.html