京东零售数仓:从离线、实时到流批一体的演进之路

洪帅 2022-04-19 10:01:39

 

本文根据洪帅老师在2021 DAMS中国数据智能管理峰会〗现场演讲内容整理而成。

 

图片

 

讲师介绍

洪帅,京东资深数仓技术专家,就职于京东零售技术与数据中心,从事大数据相关工作,经历京东数仓建设的全阶段,搭建分布式数仓架构、全域数据资产和数据应用体系,在数据资产管理和数据质量保障方面,有丰富的实战经验,通过沉淀全域数据资产,提供统一、标准、高质量的公共数据服务,支撑京东零售数字化运营和规模化创新。

 

一、大数据演进历程

 

大数据演进历程到目前分为三个阶段

 

图片

 

 

第一阶段

 

21世纪的第一个10年,企业级数据仓库从萌芽到发展,“IOTteradata” 占据了大部分市场,提供数据仓库建设从硬件、软件到实施的整体方案。

 

 

第二阶段

 

2010年-2020年,大数据平台阶段,移动互联网的飞速发展,带动大数据的发展,其中Hadoop生态技术开始大规模使用,基于Hadoop 分布式计算框架,使用相对廉价的PC服务器就能搭建大数据集群。

 

 

第三阶段

 

就是我们当前所处的阶段,经过前10年不断的积累,大数据在方法和组织的变革上也有了新的沉淀,主要体现在:

 

1)数据资产化

 

通过数据地图与数据血缘实现360°数据全链路追踪。

 

2)数据服务化

 

提供标准的数据服务,支持数据产品的灵活调用。

 

3)工具组件化

 

数据在采、存、算过程中涉及多业务线条、多场景,将这些场景与工具进行组件化沉淀,避免重复建设。

 

4)数据智能化

 

通过人工智能实现大数据的智能化应用。

 

在行业中,数据中台有非常多的开源技术可供选择,尤其是Hadoop生态圈,从数据整体流向来看各大层级的选型:

 

图片

 

  • 传输层

 

原始数据的抽取,Scribe和Flume作为非结构化日志接入,DataX作为结构化数据离线抽取,Kafka作为流式数据总线。

 

  • 存储层

 

Hadoop文件系统HDFS,Alluxio基于内存的分布式文件系统。

 

  • 计算层

 

离线计算主要是Hive、Spark、MR:多维分析引擎一般基于现有Clickhouse、Doris和ES:实时计算前些年Storm、Spark Streaming比较流行,现在基本都转到Flink。

 

  • 调度

 

基于Airflow、Oozie或者开源的Dolphin-scheduler。

 

  • 平台层

 

包括数据开发的基本运行环境和各类工具的组合,如ETL工具,模型设计工具,脚本开发工具,线上日志工具等等。

 

  • 服务层

 

主要将公共数仓的公共模型数据对外包装并提供服务,包括数据服务平台,多维分析平台,即席查询平台。

 

  • 应用层

 

基于数据服务的数据产品,另外数据安全、数据质量和数据治理总是贯穿始终。

 

二、京东零售大数据的发展过程

 

 
1、发展阶段

 

京东零售大数据发展的几个阶段如下:

 

图片

 

1)第一阶段

 

业务驱动数据技术发展,业务野蛮生长,以解决业务痛点为核心,导致烟囱式诞生了一些小数据平台。

 

2)第二阶段

 

业务精细化运营,数据平台将多业务线条、多场景的能力进行沉淀,形成数据资产。

 

3)第三阶段

 

数据中台化建设已完成,数据驱动业务,通过数据挖掘、分析和人工智能,规模化的赋能业务,经过3个阶段的发展,百家争鸣的数据平台也逐步过渡到百花齐放的数据中台。

 

 
2、业务场景

 

京东有最全的线上零售全链路业务场景:

 

  • 始于用户,平台提供订单、营销、流量场、财务结算、供应链及商品管理,后端有仓储和配送。

 

  • 基于整个零售业务,构建全域的数据资产体系,使业务数据化,数据业务化,沉淀业务模型资产,反哺于业务。

 

 
3、面临的挑战

 

数仓建设过程中面临如下挑战:

 

图片

 
  • 烟囱式的开发,各自顾各自的业务,模型重复建设,口径不统一,给业务造成困扰也浪费了资源;

     

  • 数据爆炸式的增长,硬件成本增长的边际效应越来越低;

     

  • 海量数据,如何评估数据的价值,如何治理海量数据;

     

  • 业务复杂度高,全渠道多业态带来的数据拓展的新挑战;

     

  • 实时数据需求多,实时开发门槛高周期长;

     

  • 数据时效性保障,数据指数级增长,但是时效不能增长。

 

 
4、核心需求

 

解决以上的挑战,我们需要有以下4个维度构建数仓核心能力:

 

图片

 

1)数仓架构

 

从烟囱式的数据开发到统一的数仓分层架构,将烟囱式的通用数据模型层按职责重新划分为:维度层、基础数据层和公共数据层。

 

图片

 

  • 维度层

     

用户来分析数据的窗口,维度表中包含事实表中记录的特性。

 

  • 基础数据层

 

数仓的核心层,负责统一的数据清洗、整合,实现各主题模型标准化,屏蔽业务系统干扰,保障基础数据的高可用。

 

  • 公共数据层

 

数仓中使用率最高的:

 

  • -D:统一口径封装,提供各主题统一维度和指标的明细数据;

     

  • -S:统一口径封装,提供各主题统一维度和指标的聚合数据。

 

2)数据建模

 

提供统一的数据建模方法论和工具,规范建模过程,统一维度和指标管理。

 

  • 数仓建模分两类视角,包括业务域视角和主题视角;

     

  • 数据业务域根据零售的具体业务进行划分,层次和分类相对灵活,数据主题也就是咱们经常提到的数仓主题,如商品、流量、交易、用户等等;

     

  • 基于统一维度市场选取模型维度,标准化的描述指标及派生指标逻辑,消除指标口径的二义性,从开放式的数据开发到规范建模。

 

图片

 

3)数据资产管理

 

图片

 

我们的思路是,围绕数据的全生命周期,去构建丰富的元数据,基于元数据进行数据治理、并提供资产化的服务。整个过程链接了数据生产者和数据消费者两端,我们涵盖了从数据资产的规划、建设、采集、盘点、评估、应用、销毁等环节。

 

元数据分类上,我们切分了两个维度,一方面包括了元数据的范围,比如模型元数据、指标元数据、标签元数据等,尽可能的丰富,另一方面从类型上,也划分成技术元数据、业务元数据、管理元数据等。

 

基于元数据的治理方面,我们从数据生命周期管理,数据质量、数据安全共享、数据地图、数据百科、数据血缘这几个方面为数据治理提供更多的抓手,来保证数据资产的高质量,最后再将这些高质量的数据资产,通过服务化的方式提供给数据消费者,降低数据消费门槛。

 

4)数据质量保障

 

图片

 

主要包括3个角度,准确性、及时性和一致性。

 

  • 事前预警:按照标准化的开发流程,生产与开发隔离,对打包、预发和上线流程进行检查和验证。

     

  • 事中监控:全链路监控,任务运行时效告警监控,出现问题能快速发现。

     

  • 事后恢复:快速定位快速恢复,时效性高的任务可通过快跑通道一键快跑 。并且自动对事故进行记录、分类,便于复盘。

 

三、京东零售数仓核心能力和场景实践

 

 
1、离线:海量数据快速更新实践

 

1)场景

 

图片

 

举一个刷岗的场景,什么是刷岗?就是将发生在该SKU的历史事实数据变更,需要按照最新的SKU岗位等维度信息,进行历史数据回溯,刷岗面临的挑战:

 

  • 数据量级大;

     

  • 维度组合爆炸,刷完明细模型还要刷汇总模型;

     

  • 刷新的频率高,SKU的维度信息每天都会更新。

 

2)解决方案

 

我们的解决方案如下:

 

图片

 

  • 全量刷新,数据量小的场景适用;

     

  • 增量刷新,数据量大的场景,只处理变更的字段,关联最新的维表分区,相较于全量,效率高一些;

     

  • 借助OLAP,基于Clickhouse,在CK中刷岗,事实明细、字典维表按同一字段分片,更新增量变动分片数据,效率高,成本较低;

     

  • 融合数据刷新服务,融合OLAP+Spark预计算方案,基于Iceberg的增量更新,成本低,效率高。

 

 
2、实时:基于Flink的实时数仓架构演进

 

时数仓,传统的建模方式与离线类似,按贴源层、明细层、汇总层等分层模式进行建模,但这样会造成数据链路长,降低了数据的实时性,同时实时中没有用到的指标也需要计算,导致资源开销大吞吐增加、时延增加。

 

因此我们通过解耦逻辑模型构建和物理执行过程,通过逻辑模型搭建实时数仓体系,同时通过智能物化缩短物理执行链路,节约计算存储资源。

 

图片

 
 
3、批流一体:基于Iceberg的实时数据湖架构

 

1)Lambda架构痛点

 

图片

 

Lambda本来是为了在处理大规模数据时,同时发挥流处理和批处理的优势,但是lambda架构也有痛点,如:

 

  • 需要维护实时、离线两套引擎;

     

  • 需要维护两套业务逻辑相同的代码;

     

  • 因为两条不同的数据链路,容易造成数据不一致;

     

  • 数据更新成本高,需要重跑两个链路;

     

  • 实时数据受限于消息队列的存储,回溯能力弱。

 

因为lambda架构有显而易见的缺点,所以我们也在尝试基于flink+iceberg 的实时数据湖批流一体的方案。

 

我们调研了 Delta、Hudi、Iceberg 三个开源项目,Delta 和 Hudi 跟 Spark 绑定太深,而Iceberg支持更多的分析引擎:不绑定特定的计算引擎,目前支持的计算引擎有 Spark、Flink、Presto 以及 Hive。

 

图片

 

Iceberg 正在朝着流批一体的数据湖存储层发展,而我们知道 Flink 已经是 一个流批一体的计算引擎,可以说这二者的长远规划完美匹配,未来二者将合力打造流批一体的数据湖架构。相较于数据仓库,数据湖有如下特征:

 

  • ACID 语义保证;

     

  • 支持数据更新,提供了upsert能力,可以极大地缩小数据入库延迟;

     

  • 高效 Table Schema 的变更;

     

  • 同时支持流批读写,不会出现脏读等现象。

 

实时的数据通过 Flink 写入 Iceberg 表中,近实时链路可以通过Flink/Spark 计算增量数据,离线链路也可以通过 Flink/Spark批计算读取某个快照做全局 分析,得到对应的分析结果,供不同场景下的用户读取和分析。经过这种改进之后,我们把计算引擎统一成 Flink/Spark,把存储组件统一成 了 Iceberg,整个系统的维护开发成本大大降低。

 

四、未来展望

 

图片

 

站在当下看未来,在数据湖的发展过程中,湖仓一体数据架构被推上了风口浪尖。湖仓一体架构的出现结合了传统数据仓库和数据湖的优势,将数据仓库和数据湖进行了打通,兼具灵活存储的同时极大地降低了数据管理、计算和存储成本。 

 

湖仓一体有一些关键特性,如事务支持,Schema支持,端到端的流式支持,计算存储分离等。使得数据的存储变得更加廉价和具有弹性,并且在提升数据质量上有长足的进步。 

 

再往前看一步,云原生数仓已破茧而出,支持批量计算与交互分析的MPP高性能分析型能力,实时数据处理能力和在线交互查询能力,可视化数据建模,规范化指标构建能力,基于这些能力之上的业务价值和商业价值,就如同云原生架构将重构整个IT基础设施一样,云原生数仓必将在数仓领域带来一场巨变。

最新评论
访客 2022年05月03日

写的很好呀!

访客 2022年04月07日

你好,看完文章,有点地方不太明白,想请教下两个问题…

访客 2022年03月30日

想问一下,如何才能发现数据冲突呢

访客 2022年03月30日

d

访客 2022年03月28日

梁老师,您好,看了您写的exadata image升级方案,请…

活动预告