

张家锋
蜀海供应链大数据负责人
整体负责蜀海大数据平台和数据中台建设本次分享大纲如下:
概述
最早接触Doris是在2020年初,当时是为了解决在海量数据上实时高并发查询的问题,当时调研了很多框架,在使用这Doris之前我的架构和其他公司的架构基本差不多,Hadoop,Hive,Spark,Presto,
但是这些都满足不了我的需求,在调研Clickhouse的时候,发现了Doris,看网上介绍从性能、并发性及易用性上都非常好。在深度做了测试之后给我的是更大的惊喜,我之后就将我的架构全部转向以Doris为核心去构建。同时也深度参与到社区,提了一些RP去改进Doris。
业务介绍
蜀海供应链成立于2011年6月,是集销售、研发、采购、生产、品保、仓储、运输、信息、金融为一体的餐饮供应链服务企业,现为广大餐饮连锁企业及零售客户提供整体食材供应链解决方案服务。
我们主要业务如下图:

作为公司的大数据团队主要负责构建公司级的数据仓库,向各个产品线提供面向业务的数据分析服务,如:销售额,毛利,库存周转、客诉问题、销售达成率、物流准点率、智慧工厂、供应商等业务线,在过去半年多的时间里我们通过对Doris的应用实践,基于Doris构建了蜀海的实时数据仓库。
本文总结一下我们在这期间的工作,和大家一起分享,共同讨。
我们的数仓分层:

大数据团队主要负责到ODS-DWS的建设,从DWS到ADS一般是数仓系统和业务线系统的边界。
在过去,由于缺失统一的数据仓库,业务系统之间又相互依赖,业务系统那边也探索了很多模式来支持各个业务线发展。但是效果都不是很好,出现各种各样的问题,随着业务的发展,数据量也越来越大,之前的模式也越越来越不堪负重。
架构演进
我来公司之前这边大数据团队规模也比较小,业务量也没那么大,当时只是为了支撑海底捞门店补货系统(几家门店试点),搭建了基于CDH一套大数据平台,主要是为了完成每十分钟给补货系统推送一批计算好的数据,主要是POS销售数据,沽清数据等,每天在全量的推送一次一整天的数据,当时的架构如下:

这是当时的大数据架构,为了解决这个问题,基本上能用的组件都用了,但是数据的实时性还是满足不了需求。
这个架构存在的问题:
我来蜀海之前就是Doris的用户,深知Doris的优点,在这里还是说一下。
对我们用户来说,Doris 的优点是功能强大,易用性好。功能强大指可以满足我们用户的需求,易用性好主要指 兼容 Mysql 协议和语法,以及 Online Schema Change。兼容 Mysql 协议和语法让用户的学习成本和开发成本很低, Online Schema Change 也是一个很吸引人的 feature,因为在业务快速发展和频繁迭代的情况下,Schema 变更会是一个高频的操作。
对我们平台侧来说,Doris 的优点是易运维,易扩展和高可用:
如下图:

下面这个图可能更清晰的看清楚我们基于Doris的数据流向

1.数据导入方式简单,我们针对不同业务场景使用了三种导入方式:
2.数据链路缩短,数据实时性更高;
3.数仓使用成本降低:
我们基于Doris开发了自己的数据中台,主要是为了解决以下五个问题:
围绕上面这五个问题,我们设计和开发了公司的数据中台,下面主要介绍基于Doris开发数据中台过程中我们做的一些工作。
我们这边业务库基本都是 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数据我们支持两种方式:针对Flink Job失败,可能会造成数据丢失的问题,我们解决方案如下: 因为我们这个是在数据接入层使用的,数据是进入到数据仓ODS层,在这一层我们采用的是Doris Unique Key模型,就算数据重复入库,也会自动覆盖原先的数据(这是Doris Unique Key模型的特点),不会出现数据重复的问题。提供内置规则模板,及规则定义可视化开发界面,规则试跑,规则发布等,发布的规则会自动下发到Flink Job对应的作业中执行。
基于Doris我们实现了元数据管理(业务元数据及技术元数据),提供物理元模型及血缘元模型的构建,提供一键搜索的数据地图服务。

血缘关系:通过解析Doris 审计日志,自动化完成关联关系:这个主要是在ODS(贴源层),因为业务系统数据库表没有主外键关系,在这里我要知道数据之间关联关系,通过手动定义维护。
我们为了快速响应业务系统的数据服务需求,设计开发了接口零代码开发平台,数据分析人员不需要写代码就可以快速完成API接口的开发,可以对接口进行可视化上下线操作,接口调用限制(黑白名单),支持降级限流熔断等,快捷方便,高效。

在指标系统完成基于审批流程的指标规范化定义,严格定义指标规范,规避指标二义性;支持和其它产品联动影响和展示,产品如模型设计中心、数据地图等。我们将海豚调度深度集成到我们的数据中台中,各个模块可以很方便的将任务添加到海豚调度系统中运行及监控。为了让 Doris 更好的适应各种异构数据的融合分析,使用大规模分布式环境下的机器学习场景及实时数据分析的场景,我们设计并发了 Flink Doris Connector,同时贡献给了社区。
详细的设计方案可以参考我的博客:
「Flink Doris Connector 设计方案」https://my.oschina.net/u/3774656/blog/5017244
收益
目前10台BE ,3台FE(高可用)的 Doris 环境,效率、性能表现情况如下:

开发效率的提升:
本文为从大数据到人工智能博主「bajiebajie2333」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。