蜀海供应链数仓平台建设实践
导读:随着蜀海供应链业务的发展,供应链中各个环节角色的工作人员利用数据对业务进行增长分析的需求越来越迫切。在过去大数据分析平台架构1.0的实践中,存在数据生产链路太长,架构太复杂,开发运维成本都很高,之前的团队对这个架构的驾驭能力不足,数据冗余,对业务的适应能力较弱和不能快速的响应业务各种数据需求等诸多问题,基于这种问题,我们通过引入Apache Doris引擎优化生产方案,实现蜀海供应链大数据数仓的升级,在数据开发上跑通了一套完整的流程,使我们数据需求的日常迭代更加迅速和开发效率的提升,同时也解决了我们在1.0架构中存在的诸多问题。
01
业务介绍
蜀海供应链成立于2011年6月,是集销售、研发、采购、生产、品保、仓储、运输、信息、金融为一体的餐饮供应链服务企业,现为广大餐饮连锁企业及零售客户提供整体食材供应链解决方案服务。
我们主要业务如下图:
领导驾驶舱数据实时分析,T+1报表分析
财务各类日报,月报,对账等
客户销售:采购类实时报表、日报、月报各个维度的数据分析及查询销售明细数据
供应商类:采购分析,供应商对账分析,采购策略优化等
仓储库存周转、库位、实时库存等各种维度数据指标及报表需求
运输类:准点率、温控、运输成本,调度等分析
数据分析师:快速响应各种数据分析需求,及高层领导各种临时数据需求,数据挖掘及各种实时交互式分析
各业务运营/策略/负责人主要查看各自业务运营的整体情况,查询数据中台的各该业务各种维度实时聚合数据
还有一些其他业务的数据报表及分析需求
作为公司的大数据团队主要负责构建公司级的数据仓库,向各个产品线提供面向业务的数据分析服务,如:销售额,毛利,库存周转、客诉问题、销售达成率、物流准点率、智慧工厂、供应商等业务线,在过去半年多的时间里我们通过对Doris的应用实践,基于Doris构建了蜀海的实时数据仓库。
本文总结一下我们在这期间的工作,和大家一起分享,共同讨。
我们的数仓分层:
大数据团队主要负责到ODS-DWS的建设,从DWS到ADS一般是数仓系统和业务线系统的边界。
在过去,由于缺失统一的数据仓库,业务系统之间又相互依赖,业务系统那边也探索了很多模式来支持各个业务线发展。但是效果都不是很好,出现各种各样的问题,随着业务的发展,数据量也越来越大,之前的模式也越越来越不堪负重。
02
架构演进
1. 架构1.0
我来公司之前这边大数据团队规模也比较小,业务量也没那么大,当时只是为了支撑海底捞门店补货系统(几家门店试点),搭建了基于CDH一套大数据平台,主要是为了完成每十分钟给补货系统推送一批计算好的数据,主要是POS销售数据,沽清数据等,每天在全量的推送一次一整天的数据,当时的架构如下:
这是当时的大数据架构,为了解决这个问题,基本上能用的组件都用了,但是数据的实时性还是满足不了需求。
这个架构存在的问题:
数据生产链路太长:中间经过了三四次落地操作
不支持标准SQL
数据冗余太多:数据从阿里云到最终输出,中间保存了三份同样的数据,
聚合查询效率不高:十分钟的数据基本要三四分钟甚至更长时间才能计算出来结果
开发成本太高:基本把CDH套件里的组件全部使用了
不能快速的响应业务各种数据需求
2. 架构2.0
① 为什么选择Doris?
我来蜀海之前就是Doris的用户,深知Doris的优点,在这里还是说一下。
对我们用户来说,Doris 的优点是功能强大,易用性好。功能强大指可以满足我们用户的需求,易用性好主要指兼容 Mysql 协议和语法,以及 Online Schema Change。兼容 Mysql 协议和语法让用户的学习成本和开发成本很低, Online Schema Change 也是一个很吸引人的 feature,因为在业务快速发展和频繁迭代的情况下,Schema 变更会是一个高频的操作。
对我们平台侧来说,Doris 的优点是易运维,易扩展和高可用:
易运维指 Doris 无外部系统依赖,部署和配置都很简单。
易扩展指 Doris 可以一键加减节点,并自动均衡数据。
高可用值 Dors 的 FE 和 BE 都可以容忍少数节点挂掉。
② 基于Doris的数仓架构
如下图:
数仓整体以Doris为核心构建公司企业级数据仓库
通过统一的数据采集系统,多种数据采集手段,包括Mysql binlog解析(Cannal),日志采集Flume(Doris审计日志)、埋点接口等实现多种异构数据的采集
将采集的数据统一通过消息队列(Kafka)完成高并发的数据吞吐,同时实现数仓及计算引擎的解耦
Flink计算引擎完成数据的ETL处理及实时数据的统计,并将数据推送到Kafka及Doris(Stream Load)
对外通过doris和消息队列对外提供数据服务
数据质量管理是实现对从数据采集到数据ETL处理,数据存储及数据服务全生命周期的数据管理,包括元数据,数据质量,数据规范、数据安全
下面这个图可能更清晰的看清楚我们基于Doris的数据流向
新架构优点:
数据导入方式简单,我们针对不同业务场景使用了三种导入方式:
Routin load : 异构实时异步数据导入(这种主要使用在一些临时的数据接入)
Stream Load :业务数据实时异步数据接入(我们封装了业务数据零代码入仓,后面我会介绍)
Insert into :定时通过 DWD 层数仓表生成 DWS/ADS 层数仓表
数据链路缩短,数据实时性更高;
数仓使用成本降低:
Doris 支持 MySQL 协议,数据分析师可以直接进行自助取数。
Doris 不依赖 Hadoop 生态圈组件,降低了架构的复杂度,大大降低运维成本
Doris 同时支持离线批量和实时数据,一个框架搞定一切
03
我们做的一些工作
我们基于Doris开发了自己的数据中台,主要是为了解决以下五个问题:
找数:要知道数据从哪来到哪去
理解数据:这个数据是干嘛的,每个字段是什么意思
问题评估:一个新的需求过来,怎么评估开发,会使用到哪些数据,这些数据关系是什么
取数:上面问题都解决以后,数据怎么获取
数据可视化展现:这是最终呈现的结果
围绕上面这五个问题,我们设计和开发了公司的数据中台,下面主要介绍基于Doris开发数据中台过程中我们做的一些工作。
1. 零代码入仓
要做到业务快速响应,首先你要能实现数据的快速数据接入,包括数据接入过程中的 ETL。
我们这边业务库基本都是 Mysql,也有非 Mysql 数据库,基于这种情况,我们采用了 Canal 及 Datax 完成数据采集,同时对 Datax 进行了改造,是 Datax 抽取的数据格式和 Canal 一致,然后通过 Flink 基于 Doris Stream Load 完成数据入仓操作,整个过程可以零代码完成,并集成了我们自研的规则引擎,实现规则自定义及规则自动下发到Flink Job中,具体展示效果如下:
数据分析人员可以通过Web方式零代码完成业务数据接入,最后提交任务即可。
数据接入
目前支持 Mysql,Kafka,Datax,这里我们采用的是Canal实现对Mysql binlog进行监控,然后将mysql的数据实时推送到Kafka,接入任务可以监控,接入数据量可监控
数据入仓
数据接入到Doris数据仓库对应的表中,这里我们采用的是Flink实时消费KafKa的数据,然后通过Doris的Stream Load完成。Flink消费Kafka数据我们支持两种方式:
指定Kafka Topic的Offset进行消费:kafka.offset
指定时间戳的方式:kafka.timestamp
数据丢失的问题
针对Flink Job失败,可能会造成数据丢失的问题,我们解决方案如下:
如果你记录了失败的时间点的Kafka Offset,可以通过配置文件配置这个参数来重启Flink Job就行。这样不会造成数据丢失
如果没有记录这个offset,可通过指定consumer.setStartFromTimestamp(timestamp);这个时间就是在配置文件中配置的时间戳,这样无论是通过offset还是从指定的时间开始消费Kafka数据,都不会造成数据丢失
数据重复问题
因为我们这个是在数据接入层使用的,数据是进入到数据仓ODS层,在这一层我们采用的是Doris Unique Key模型,就算数据重复入库,也会自动覆盖原先的数据(这是Doris Unique Key模型的特点),不会出现数据重复的问题。
自研规则引擎
提供内置规则模板,及规则定义可视化开发界面,规则试跑,规则发布等,发布的规则会自动下发到Flink Job对应的作业中执行。
2. 基于Doris数仓的元数据管理
数据地图
基于Doris我们实现了元数据管理(业务元数据及技术元数据),提供物理元模型及血缘元模型的构建,提供一键搜索的数据地图服务。
血缘关系及关联关系
血缘关系:通过解析Doris 审计日志,自动化完成
关联关系:这个主要是在ODS(贴源层),因为业务系统数据库表没有主外键关系,在这里我要知道数据之间关联关系,通过手动定义维护。
数据服务开发
我们为了快速响应业务系统的数据服务需求,设计开发了接口零代码开发平台,数据分析人员不需要写代码就可以快速完成API接口的开发,可以对接口进行可视化上下线操作,接口调用限制(黑白名单),支持降级限流熔断等,快捷方便,高效。
接口定义开发
数据指标管理
在指标系统完成基于审批流程的指标规范化定义,严格定义指标规范,规避指标二义性;支持和其它产品联动影响和展示,产品如模型设计中心、数据地图等。
调度系统
我们将海豚调度深度集成到我们的数据中台中,各个模块可以很方便的将任务添加到海豚调度系统中运行及监控。
3. Flink Doris Connector
为了让 Doris 更好的适应各种异构数据的融合分析,使用大规模分布式环境下的机器学习场景及实时数据分析的场景,我们设计并发了 Flink Doris Connector,同时贡献给了社区。具体的实现方案通过主数据分区来并行执行,大大提高了读取的速度和效率。同时通过FlinkSQL方式读写Drois数据。读数据主要进行异构数据源的关联分析,在回写到Doris数仓里面去。
详细的设计方案可以参考我的博客:「Flink Doris Connector 设计方案」
https://my.oschina.net/u/3774656/blog/5017244
04
收益
目前10台BE ,3台FE(高可用)的 Doris 环境,效率、性能表现情况如下:
支撑十几条业务线以上,整体响应达到ms级。
支持百万、千万级大表关联查询,同时进行维表关联的雪花模型,可以实现秒级响应。
日级别,基于销售明细现场计算,同时满足汇总及下钻明细查询,查询时效基本都可以控制在秒级。
七日趋势分析,100毫秒-3秒,根据集群规模不同查询性能有所区别,但数据量较大时,调动的集群资源较多,因此MPP的并发性能受限于集群的性能。一般原则是并发较高的业务,需要严格控制查询时效(基本在毫秒级),对于并发不高的业务,允许进行较大的查询,但也要考虑集群的承受能力。
通过应用以及Doris的不断改进升级,Doris的高可靠、高可用、高可扩展性也得到进一步验证,服务稳定可靠。
入库性能,每秒峰值可以在30-40万条,同时不影响正常的数据分析
开发效率的提升:
数据接入:整库几十张表在一天之内可以完成接入到数仓(包括ETL),无需代码
报表开发:效率提升至少2-3倍,大大节省人力资源,而且不需要开发人员,只需要数据分析人员通过SQL加工,然后拖拽即可完成数据可视化展现
数据实时性:满足业务各种实时准实时数据分析需求,并且能做到快速响应
蜀海供应链数仓平台建设实践相关推荐
- 数仓:爱奇艺数仓平台建设实践
文章目录 简介 一.数据仓库 1.0 二.数据仓库 2.0 三.数仓建设 3.1 一致性维度 3.2 指标体系 3.3 建模流程 3.4 数据图谱 3.5 数据血缘 总结 简介 先介绍一下爱奇艺公司整 ...
- 网易严选离线数仓质量建设实践
做数仓最重要的是什么?一是模型易用性,二是数据质量.模型易用性我们可以通过建模规范.指标管理等方式去实现.而对于数据质量呢?本篇将以严选数仓为例,从建设目标.保障措施.效果评价等几方面探讨数仓质量建设 ...
- 美团技术:到店供应链及商品平台建设实践(胶片)
高尚@美团到店平台技术部 读完需要 10 分钟 速读仅需 1 分钟 前言 1. 美团技术:交易平台建设实践(胶片) 2. 美团技术:CRM平台建设实践(胶片) 今日中生代技术文章由美团到店平台技术部@ ...
- 滴滴打车 -- 数仓指标体系建设实践
桔妹导读:指标体系是什么?如何使用OSM模型和AARRR模型搭建指标体系?如何统一流程.规范化.工具化管理指标体系?本文会对建设的方法论结合滴滴数据指标体系建设实践进行解答分析. 1. 什么是指标体 ...
- Apache Doris在蜀海供应链的实践
Apache Doris 代码仓库地址:apache/incubator-doris 欢迎大家关注加星 概述 最早接触doris是在2020年初,当时是为了解决在海量数据上实时高并发查询的问题,当 ...
- 基于Apache Flink的爱奇艺实时计算平台建设实践
导读:随着大数据的快速发展,行业大数据服务越来越重要.同时,对大数据实时计算的要求也越来越高.今天会和大家分享下爱奇艺基于Apache Flink的实时计算平台建设实践. 今天的介绍会围绕下面三点展开 ...
- 流批一体生产应用!Bigo 实时计算平台建设实践
简介:本文由 Bigo 计算平台负责人徐帅分享,主要介绍 Bigo 实时计算平台建设实践的介绍 本文由 Bigo 计算平台负责人徐帅分享,主要介绍 Bigo 实时计算平台建设实践的介绍.内容包括: B ...
- Bigo 实时计算平台建设实践
本文由 Bigo 计算平台负责人徐帅分享,主要介绍 Bigo 实时计算平台建设实践的介绍.内容包括: Bigo 实时计算平台的发展历程 特色与改进 业务场景 效率提升 总结展望 一.Bigo 实时计算 ...
- 货拉拉数据治理平台建设实践
导读:在数据开发和数仓建设过程中,数据治理落地和提升数据质量的重要性逐渐凸显,本文将从货拉拉的数据治理实践出发,分享货拉拉在数据治理体系构建.数据质量平台建设.元数据平台建设方面的实践. 今天的分享会 ...
- vivo 实时计算平台建设实践
作者:vivo 互联网实时计算团队- Chen Tao 本文根据"2022 vivo开发者大会"现场演讲内容整理而成. vivo 实时计算平台是 vivo 实时团队基于 Apach ...
最新文章
- ubuntu/debian安装最新版docker和docker-compose
- 苹果手机无线充电板外部电磁场测试
- salt.states.file试用
- Linux 精通Linux的“kill”命令
- 新星云集!CVPR 论文分享会圆桌论坛:计算机视觉科研​之“路”
- 实战演练:MySQL手动注册binlog文件造成主从同步异常
- CentOS 7 设置 DNS
- 华为鸿蒙os2.0游戏,华为鸿蒙os2.0系统下载-华为鸿蒙系统官方下载入口2.0下载 - 一游网手机游戏...
- python视频教程唐学韬-python
- 第二章实践与认识及其发展规律
- python 切片步长_python 索引+切片+步长
- win7时间同步出错
- 【NOI2017模拟3.30】原谅(计算几何,期望)
- 用WORD批量制作工作证件
- Photoshop入门教程:画笔工具轻松打造轻纱效果
- 网络直播课程:神马是敏捷?(直播时间:2014-7-14 20:00-21:00)
- 使用idea构建父子类springboot项目教程,并教你启动子项目(构建项目集合)
- 带你从Vue入门到进阶
- 医院陪诊小程序怎么开发-医院陪诊小程序源码功能
- 太阳软件站长丨Python比动态ip代理更适合人工智能
热门文章
- ug建模和草图切换_从草图到XD,为什么我要切换
- Matlab基础(5)——符号运算
- RANSAC介绍(Matlab版直线拟合+平面拟合)
- Arduino mixly 点灯科技(blinker) 在线电压监测(带电压高低提醒)
- Redis6.2.6下载和安装
- 怎么彻底卸载cad2017_彻底卸载cad2010的方法步骤
- Solid PDF Tools(PDF全能工具) v10.0中文破解版
- python贴吧顶贴_python实现贴吧顶贴机器人
- Project 制作工作进度计划 排除休息日
- arduino交互设计作品2019——害羞的郁金香