蜀海供应链成立于2011年6月,是集销售、研发、采购、生产、品保、仓储、运输、信息、金融为一体的餐饮供应链服务企业,现为广大餐饮连锁企业及零售客户提供整体食材供应链解决方案服务。
我们主要业务如下图:
我们的数仓分层:
大数据团队主要负责到ODS-DWS的建设,从DWS到ADS一般是数仓系统和业务线系统的边界。
在过去,由于缺失统一的数据仓库,业务系统之间又相互依赖,业务系统那边也探索了很多模式来支持各个业务线发展。但是效果都不是很好,出现各种各样的问题,随着业务的发展,数据量也越来越大,之前的模式也越越来越不堪负重。
02
架构演进
我来公司之前这边大数据团队规模也比较小,业务量也没那么大,当时只是为了支撑海底捞门店补货系统(几家门店试点),搭建了基于CDH一套大数据平台,主要是为了完成每十分钟给补货系统推送一批计算好的数据,主要是POS销售数据,沽清数据等,每天在全量的推送一次一整天的数据,当时的架构如下:
这是当时的大数据架构,为了解决这个问题,基本上能用的组件都用了,但是数据的实时性还是满足不了需求。
这个架构存在的问题:
①为什么选择Doris?
我来蜀海之前就是Doris的用户,深知Doris的优点,在这里还是说一下。
对我们用户来说,Doris的优点是功能强大,易用性好。功能强大指可以满足我们用户的需求,易用性好主要指兼容Mysql协议和语法,以及OnlineSchemaChange。兼容Mysql协议和语法让用户的学习成本和开发成本很低,OnlineSchemaChange也是一个很吸引人的feature,因为在业务快速发展和频繁迭代的情况下,Schema变更会是一个高频的操作。
对我们平台侧来说,Doris的优点是易运维,易扩展和高可用:
如下图:
下面这个图可能更清晰的看清楚我们基于Doris的数据流向
我们基于Doris开发了自己的数据中台,主要是为了解决以下五个问题:
围绕上面这五个问题,我们设计和开发了公司的数据中台,下面主要介绍基于Doris开发数据中台过程中我们做的一些工作。
我们这边业务库基本都是Mysql,也有非Mysql数据库,基于这种情况,我们采用了Canal及Datax完成数据采集,同时对Datax进行了改造,是Datax抽取的数据格式和Canal一致,然后通过Flink基于DorisStreamLoad完成数据入仓操作,整个过程可以零代码完成,并集成了我们自研的规则引擎,实现规则自定义及规则自动下发到FlinkJob中,具体展示效果如下:
数据分析人员可以通过Web方式零代码完成业务数据接入,最后提交任务即可。
目前支持Mysql,Kafka,Datax,这里我们采用的是Canal实现对Mysqlbinlog进行监控,然后将mysql的数据实时推送到Kafka,接入任务可以监控,接入数据量可监控
数据接入到Doris数据仓库对应的表中,这里我们采用的是Flink实时消费KafKa的数据,然后通过Doris的StreamLoad完成。Flink消费Kafka数据我们支持两种方式:
针对FlinkJob失败,可能会造成数据丢失的问题,我们解决方案如下:
因为我们这个是在数据接入层使用的,数据是进入到数据仓ODS层,在这一层我们采用的是DorisUniqueKey模型,就算数据重复入库,也会自动覆盖原先的数据(这是DorisUniqueKey模型的特点),不会出现数据重复的问题。
提供内置规则模板,及规则定义可视化开发界面,规则试跑,规则发布等,发布的规则会自动下发到FlinkJob对应的作业中执行。
2.基于Doris数仓的元数据管理
基于Doris我们实现了元数据管理(业务元数据及技术元数据),提供物理元模型及血缘元模型的构建,提供一键搜索的数据地图服务。
血缘关系:通过解析Doris审计日志,自动化完成
关联关系:这个主要是在ODS(贴源层),因为业务系统数据库表没有主外键关系,在这里我要知道数据之间关联关系,通过手动定义维护。
我们为了快速响应业务系统的数据服务需求,设计开发了接口零代码开发平台,数据分析人员不需要写代码就可以快速完成API接口的开发,可以对接口进行可视化上下线操作,接口调用限制(黑白名单),支持降级限流熔断等,快捷方便,高效。
在指标系统完成基于审批流程的指标规范化定义,严格定义指标规范,规避指标二义性;支持和其它产品联动影响和展示,产品如模型设计中心、数据地图等。
我们将海豚调度深度集成到我们的数据中台中,各个模块可以很方便的将任务添加到海豚调度系统中运行及监控。
为了让Doris更好的适应各种异构数据的融合分析,使用大规模分布式环境下的机器学习场景及实时数据分析的场景,我们设计并发了FlinkDorisConnector,同时贡献给了社区。具体的实现方案通过主数据分区来并行执行,大大提高了读取的速度和效率。同时通过FlinkSQL方式读写Drois数据。读数据主要进行异构数据源的关联分析,在回写到Doris数仓里面去。
详细的设计方案可以参考我的博客:「FlinkDorisConnector设计方案」
04
收益
目前10台BE,3台FE(高可用)的Doris环境,效率、性能表现情况如下: