7

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

 2 years ago
source link: https://dbaplus.cn/news-73-4422-1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

洪帅 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基础设施一样,云原生数仓必将在数仓领域带来一场巨变。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK