如果你也想做实时数仓…

数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务,数据仓库的建设也是“数据智能”中必不可少的一环。本文将从数据仓库的简介、经历了怎样的发展、如何建设、架构演变、应用案例以及实时数仓与离线数仓的对比六个方面全面分享关于数仓的详细内容。

1.数据仓库简介

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

数据仓库是伴随着企业信息化发展起来的,在企业信息化的过程中,随着信息化工具的升级和新工具的应用,数据量变的越来越大,数据格式越来越多,决策要求越来越苛刻,数据仓库技术也在不停的发展。
数据仓库的趋势:

  • 实时数据仓库以满足实时化&自动化决策需求;
  • 大数据&数据湖以支持大量&复杂数据类型(文本、图像、视频、音频);

2.数据仓库的发展

数据仓库有两个环节:数据仓库的构建与数据仓库的应用。

早期数据仓库构建主要指的是把企业的业务数据库如 ERP、CRM、SCM 等数据按照决策分析的要求建模并汇总到数据仓库引擎中,其应用以报表为主,目的是支持管理层和业务人员决策(中长期策略型决策)。

随着业务和环境的发展,这两方面都在发生着剧烈变化。

  • 随着IT技术走向互联网、移动化,数据源变得越来越丰富,在原来业务数据库的基础上出现了非结构化数据,比如网站 log,IoT 设备数据,APP 埋点数据等,这些数据量比以往结构化的数据大了几个量级,对 ETL 过程、存储都提出了更高的要求;
  • 互联网的在线特性也将业务需求推向了实时化,随时根据当前客户行为而调整策略变得越来越常见,比如大促过程中库存管理,运营管理等(即既有中远期策略型,也有短期操作型);同时公司业务互联网化之后导致同时服务的客户剧增,有些情况人工难以完全处理,这就需要机器自动决策。比如欺诈检测和用户审核。

总结来看,对数据仓库的需求可以抽象成两方面:实时产生结果、处理和保存大量异构数据。

注:这里不讨论数据湖技术。

3.数据仓库建设方法论

3.1 面向主题

从公司业务出发,是分析的宏观领域,比如供应商主题、商品主题、客户主题和仓库主题

3.2 为多维数据分析服务

数据报表;数据立方体,上卷、下钻、切片、旋转等分析功能。

3.3 反范式数据模型

以事实表和维度表组成的星型数据模型

4.数据仓库架构的演变

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

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

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

4.1 离线大数据架构

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

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

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

4.2 Lambda 架构

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

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

Lambda 架构问题:

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

4.3 Kappa 架构

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

  • Kappa 架构可以认为是 Lambda 架构的简化版(只要移除 lambda 架构中的批处理部分即可)。
  • 在 Kappa 架构中,需求修改或历史数据重新处理都通过上游重放完成。
  • Kappa 架构最大的问题是流式重新处理历史的吞吐能力会低于批处理,但这个可以通过增加计算资源来弥补。

Kappa 架构的重新处理过程:

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

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

4.4 Lambda 架构与 Kappa 架构的对比

  1. 在真实的场景中,很多时候并不是完全规范的 Lambda 架构或 Kappa 架构,可以是两者的混合,比如大部分实时指标使用 Kappa 架构完成计算,少量关键指标(比如金额相关)使用 Lambda 架构用批处理重新计算,增加一次校对过程。
  2. Kappa 架构并不是中间结果完全不落地,现在很多大数据系统都需要支持机器学习(离线训练),所以实时中间结果需要落地对应的存储引擎供机器学习使用,另外有时候还需要对明细数据查询,这种场景也需要把实时明细层写出到对应的引擎中。参考后面的案例。
  3. 另外,随着数据多样性的发展,数据仓库这种提前规定 schema 的模式显得越来难以支持灵活的探索&分析需求,这时候便出现了一种数据湖技术,即把原始数据全部缓存到某个大数据存储上,后续分析时再根据需求去解析原始数据。简单的说,数据仓库模式是 schema on write,数据湖模式是 schema on read。

5.实时数仓案例

菜鸟仓配实时数据仓库本案例参考自菜鸟仓配团队的分享,涉及全局设计、数据模型、数据保障等几个方面。

注:特别感谢缘桥同学的无私分享。

5.1 整体设计

整体设计如下图,基于业务系统的数据,数据模型采用中间层的设计理念,建设仓配实时数仓;计算引擎,选择更易用、性能表现更佳的实时计算作为主要的计算引擎;数据服务,选择天工数据服务中间件,避免直连数据库,且基于天工可以做到主备链路灵活配置秒级切换;数据应用,围绕大促全链路,从活动计划、活动备货、活动直播、活动售后、活动复盘五个维度,建设仓配大促数据体系。

5.2 数据模型

不管是从计算成本,还是从易用性,还是从复用性,还是从一致性等等,我们都必须避免烟囱式的开发模式,而是以中间层的方式建设仓配实时数仓。与离线中间层基本一致,我们将实时中间层分为两层。

  • 第一层 DWD 公共实时明细层

实时计算订阅业务数据消息队列,然后通过数据清洗、多数据源 join、流式数据与离线维度信息等的组合,将一些相同粒度的业务系统、维表中的维度属性全部关联到一起,增加数据易用性和复用性,得到最终的实时明细数据。这部分数据有两个分支,一部分直接落地到 ADS,供实时明细查询使用,一部分再发送到消息队列中,供下层计算使用;

  • 第二层 DWS 公共实时汇总层

以数据域+业务域的理念建设公共汇总层,与离线数仓不同的是,这里汇总层分为轻度汇总层和高度汇总层,并同时产出,轻度汇总层写入 ADS,用于前端产品复杂的 olap 查询场景,满足自助分析和产出报表的需求;高度汇总层写入 Hbase,用于前端比较简单的 kv 查询场景,提升查询性能,比如实时大屏等;

注:

  • ADS 是一款提供 OLAP 分析服务的引擎。开源提供类似功能的有,Elastic Search、Kylin、Druid 等;
  • 案例中选择把数据写入到 Hbase 供 KV 查询,也可根据情况选择其他引擎,比如数据量不多,查询压力也不大的话,可以用 MySQL;
  • 因主题建模与业务关系较大,这里不做描述;

5.3 数据保障

阿里巴巴每年都有双十一等大促,大促期间流量与数据量都会暴增。实时系统要保证实时性,相对离线系统对数据量要更敏感,对稳定性要求更高。所以为了应对这种场景,还需要在这种场景下做两种准备:

  • 大促前的系统压测;
  • 大促中的主备链路保障;

菜鸟双11「仓储配送数据实时化」详情了解~

 

6. 实时数仓与离线数仓的对比

在看过前面的叙述与菜鸟案例之后,我们看一下实时数仓与离线数仓在几方面的对比:

  • 首先,从架构上,实时数仓与离线数仓有比较明显的区别,实时数仓以 Kappa 架构为主,而离线数仓以传统大数据架构为主。Lambda 架构可以认为是两者的中间态。
  • 其次,从建设方法上,实时数仓和离线数仓基本还是沿用传统的数仓主题建模理论,产出事实宽表。另外实时数仓中实时流数据的 join 有隐藏时间语义,在建设中需注意。
  • 最后,从数据保障看,实时数仓因为要保证实时性,所以对数据量的变化较为敏感。在大促等场景下需要提前做好压测和主备保障工作,这是与离线数据的一个较为明显的区别。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云战略投入政企市场,发布华为云Stack

2020年5月15日,华为云发布政企战略,并宣布华为云Stack系列新品正式上市。华为云Stack是位于政企客户本地数据中心的云基础设施,能为政企客户提供在云上和本地部署体验一致的云服务。随着政企智能升级进入深水区,华为云将战略投入政…

如何在 Apache Flink 中使用 Python API?

本文根据 Apache Flink 系列直播课程整理而成,由 Apache Flink PMC,阿里巴巴高级技术专家 孙金城 分享。重点为大家介绍 Flink Python API 的现状及未来规划,主要内容包括:Apache Flink Python API 的前世今生和未来发展&#xff…

阿里云HBase Ganos全新升级,推空间、时空、遥感一体化基础云服务

1、HBase Ganos是什么 Ganos是阿里云时空PaaS服务的自研核心引擎。Ganos已作为云数据库时空引擎与数据库平台融合,建立了以自研云原生数据库POALRDB为基础,联合NoSQL大数据平台(Ali-HBASE和X-Pack Spark)的完整时空地理信息云化管…

看完这篇操作系统,和面试官扯皮就没问题了!

作者 | Cxuan责编 | Carol来源 | 程序员 cxuan封图 | CSDN 付费下载于视觉中国1、解释一下什么是操作系统操作系统是运行在计算机上最重要的一种软件,它管理计算机的资源和进程以及所有的硬件和软件。它为计算机硬件和软件提供了一种中间层。通常情况下,…

Linux centos7 安装 MySQL5.7.x

文章目录一、下载安装2. wget 下载方式3. 安装4. 初始化数据库二、修改密码2.1. 修改密码2.2. 修改密码2.3. 允许远程访问2.4. 关闭防火墙2.4. 建立mysql软连接一、下载安装 下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 下载地址&#xff…

顺序结构,选择结构,反编译

顺序结构 Java基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句的执行顺序结构是最简单的算法结构任何一个算法都离不开的一种基本算法结构 package com.boss.struct;public class ShunXuDemo {public static void main(String[] args) {Sys…

助力共享经济,芝麻信用背后的技术

近期,CCTV9播放了自制的系列纪录片《大数据时代》,该片是国内首部大数据产业题材纪录片,节目细致而生动地讲述了大数据技术在政府治理、民生服务、数据安全、工业转型、未来生活等方面给我们带来的改变和影响。在第四集中,讲述了芝…

你的项目是否真的需要 DevOps?

DevOps即服务(DevOps-as-a-Service)是一种新兴的开发理念。DevOps作为一种方法,将传统的团队协作转移到开发和运维团队中,通过使用可堆叠的虚拟扩展工具实现自动化。作者 | raghuraji300译者 | Arvin,责编 | 屠敏头图 …

与你同行,才能无障碍

先给大家分享一个笔者的真实故事。前阵子她被诊断得了急性结膜炎,医生切切叮嘱 72 小时里多闭目养神不能目视任何自光源体,“尤其是电脑和手机!”医生特地关照了一句。 她好不容易挪回家,想起一整天未能进食,作为淘宝…

震惊!阿里的程序员竟被一个简单的 SQL 查询难住了!

作者 | 唐磊责编 | Carol来源 | 程序猿石头封图 | CSDN 付费下载于视觉中国最近工作上遇到一个”神奇”的问题,或许对大家有帮助,因此形成本文。问题大概是,我有两个表 TableA,TableB,其中 TableA 表大概百万行级别(存…

ETL异构数据源Datax_datax-web安装部署_10

文章目录1. 解压2. 一键安装3. 修改执行器py地址4. 一键启动5. 查看启动日志6. 访问地址登录7. 操作记录1. 解压 tar -zxvf datax-web-2.1.2.tar.gz2. 一键安装 # 执行一键安装脚本,系统中需要有mysql环境,会自动执行sql文件初始化bin/install.sh cd datax-web-2.1.2/ bin/in…

3D 真的很难吗,瞧瞧支付宝怎么做?

阿里妹导读:图像作为人类感知世界的视觉基础,是我们在这个信息化时代获取信息、表达信息及传递信息的重要手段,而生成图像最高效准确的方式就是由计算机生成、显示、绘制,这些技术又统称计算机图形技术。计算机图形技术已经是许多…

OpenStack发布Ussuri版本 实现智能开源基础设施的自动化

从2010年到2020年,OpenStack项目整整走过了十个春夏秋冬。10年来,关于OpenStack的争议持续不断,但不可否认的是,在不同技术路线的争执中,OpenStack所展现的蓬勃生命力仍无可比拟。据451研究机构2019年9月发布的市场监测…

ETL异构数据源Datax_图形化数据同步_11

数据同步全量增量知识SQL和执行频次不一样,其他的都一样 文章目录一、Oracle同步Mysql(全量)1. 添加项目2. 添加数据源3. 添加任务4. 构建json5. 任务执行6. 查看日志7. 同步数量对比二、Mysql同步Oracle(全量)2.1. 添加构建reader2.2. 添加构建writer2.3. 配置同步…

RocketMQ消息轨迹-设计篇

RocketMQ 消息轨迹主要包含两篇文章:设计篇与源码分析篇,本节将详细介绍RocketMQ消息轨迹-设计相关。 RocketMQ消息轨迹,主要跟踪消息发送、消息消费的轨迹,即详细记录消息各个处理环节的日志,从设计上至少需要解决如…

红帽加速开放混合云创新,助力企业成功迈向开源应用时代

2020年的开局让人有些意想不到,一场新冠疫情给人们的生活带来了前所未有的改变。对于企业更是有着数不尽的困难与挑战。在过去的三个月当中,全世界都面临着有关于“虚拟会议”所带来的便捷与隐患问题,原因在于虚拟会议中对于网络体验与安全的…

ETL异构数据源Datax_自增ID增量同步_12

文章目录增量同步方法 1.先同步存量数据 2.再同步增量数据(根据自增ID、日期条件) 前提条件: 1.只针对数据增长,如果老数据被update/delete则无法使用增量同步方式。 基于主键自增ID增量同步 Oracle同步Mysql演示 idno采用序列自增 添加项目 AutoIncr…

K8S从懵圈到熟练 - 节点下线姊妹篇

之前分享过一例集群节点NotReady的问题。在那个问题中,我们的排查路劲,从K8S集群到容器运行时,再到sdbus和systemd,不可谓不复杂。那个问题目前已经在systemd中做了修复,所以基本上能看到那个问题的几率是越来越低了。…

PLSQL 查询结果只显示年月日不显示时分秒的解决方法

PLSQL 14查询结果只显示年月日不显示时分秒的解决方法 如果plsql里面日期显示出现混乱,并且按照一般的调整首选项里日期格式调整不了,可以修改环境变量,新建环境变量,变量名:nls_date_format 变量值:YYYY-…

阿里云“网红“运维工程师白金:做一个平凡的圆梦人

他是阿里云的一位 P8 运维专家,却很有野心得给自己取花名“辟拾(P10)”; 他没有华丽的履历,仅凭着 26 年的热爱与坚持,一步一个脚印踏出了属于自己的技术逆袭之路; 他爱好清奇,练就了…