作者:石公星,雨润集团基础数据平台架构师 & SelectDB 内容团队
雨润控股集团是一家集食品、地产、商业、物流、旅游、金融和建筑等七大产业于一体的多元化企业集团,员工总数近 13 万人,下属子(分)公司 300 多家,遍布全国 30 个省直辖市和自治区。企业综合实力位列中国企业 500 强第 112 位,中国制造业 500 强第 39 位,中国民营企业 500 强第 8 位。目前,旗下拥有雨润食品、中央商场两家上市公司。雨润不仅是一个品牌,更是一种生活方式,涉及人民大众生活的方方面面:衣、食、住、行、娱乐等,雨润致力于民生产业,围绕人民大众的生活需求,生产好的产品,提供细致服务,用心创造各种可能。
作为国内知名的食品与农业综合性企业,在数字化转型的浪潮中,雨润集团深刻认识到,数据是企业成功的关键。企业不仅要建立数据驱动的文化,更需要以先进技术来增强数据处理和分析能力并建立完善的数据治理框架,以此帮助企业快速洞察市场动态、优化供应链管理、提高生产效率,以应对快速变化的市场环境并提升核心竞争力。
为此,雨润集团自 2022 年起启动了数据仓库升级项目, 引入了 Apache Doris 分别对早期离线数据仓库及实时数仓全面升级改造,构建了统一实时数据仓库 。相较于之前, 带来了计算效率提升 30 倍、存储资源节省 90%、成本降低超 100 万、人员效率提升 3 倍的显著效益。 不仅强化了雨润集团自身的核心竞争力,更为智能化、高效化转型指明了方向。
业务需求
雨润集团业务数据主要源自生鲜数据、深加工数据和养殖数据这三部分,这些数据具体包括:
为充分挖掘这些数据的潜在价值,雨润集团希望基于上述几类关键数据,重点提供以下几项数据服务:
早期数据架构
01 基于 Hive 的离线数仓
雨润集团的业务数据可细分为新零售(包括传统采购、销售、库存)、养殖数据、OA 数据(审批流程数据)、生鲜(采购的猪牛羊以及加工数据)、第三方数据(价格比对)等数据维度,均被存储在业务数据库 MySQL 和 Oracle 中,通过 Sqoop 将以上数据导入到 Hive 离线数仓中进行处理,为用户提供数据服务。具体来说:
02 基于 HBase 的实时数仓
除了每天定时产出 T+1 的 BI 报表以外,为了应对数据时效性较高的场景,例如业务用户需要对零售门店当日经营数据进行实时查询分析,因此我们在离线数据仓库的基础上加入了实时数据处理链路,通过 Kafka 和 Flink 进行实时数据采集并存储在 HBase 中。考虑到某些场景不仅需要调取/查询当天的数据,甚至需要对当月/年的数据进行查询,因此 T+1 的存量历史数据会与 T+0 的实时增量数据汇总存储至 HBase 中进行合并。整体架构如上图所示:
此外,为进一步优化查询性能并降低存储成本,引入了 Redis 作为维度数据的缓存层,将高频访问的热数据缓存于 Redis 中,实现了数据的快速读取与响应,将非频繁访问的冷数据存储在 HBase 中,保证数据可长期被访问。
03 存在的问题
基于 ApacheDoris 的全新架构
01 选型思考
针对早期架构暴露的诸多问题,我们希望在满足需求的情前提下,尽可能实现架构精简和高效,以降低开发、运维、管理的复杂性。为此我们进行了深度调研并决定引入 Apache Doris,引入 Doris 主要基于以下考虑:
02 基于 Apache Doris 建立统一实时数据仓库
Apache Doris 引入后,我们对离线数仓及实时数仓进行全面升级及改造,构建了统一实时的数据仓库。
在离线数据处理上, 通过自研的 Jar 及 Doris Multi Catalog 将业务数据库数据同步到 Doris 中,数据逐步通过 Doris 的 ODS 层、DWD 层、DWS 层、ADS 层完成清洗、汇总等操作,最后由 ADS 层直接为应用层提供离线数据服务。ODS 层使用了 Doris Unique Key 模型,无需手动 Merge 历史数据,有效降低了数据处理的复杂性。
在实时数据处理上, 通过 Flink CDC 将业务数据库数据实时同步至 Doris ,数据进入 Doris 后同样经过分层处理,由 ADS 层为应用层提供实时数据服务。为避免任务处理时出现异常数据等问题,在实时数据处理流程中,会借助>
Apache Doris 的引入,为雨润集团带来非常显著的收益:
自研数据治理平台
为提升数据处理效率、确保数据的质量与安全,我们自研了数据治理平台,并集成了数据服务 API 平台、DDL 转换工具、数据集成、元数据管理、数据大屏等核心功能,便于业务部门高效使用及管理数据。接下来,我们对几个重要的功能进行介绍。
01 数据服务 API 平台
考虑到某些场景数据敏感、某些业务希望把数据中台计算好的数据嵌入到自己的业务系统中,因此,不便于在数据中台展示报表,因此我们基于 Apache Doris 构建了数据服务 API 平台。用户可以在页面上自主配置数据源、请求名称、SQL 配置等操作,当 SQL 配置完成后,就可以从 Doris 中读取数据,数据返回后通过 API 网关的认证授权、黑白名单、精准限流等操作,实现报表内容隐私性的保护。该平台由 Spring Cloud Gateway 提供统一的路由方式,调用数据主要服务 BI 大屏、APP 应用和其他业务系统。
该平台使用简便,即使不精通 Java 和 Spring Cloud 也可以实现接口的开发。在满足报表隐私性要求的前提下,不仅降低了数据服务接口开发的难度和成本,也提升了数据服务的灵活性和可定制性。
02DDL 转换工具
在实际应用过程中,我们发现从 MySQL 或者 Oracle 中同步数据表到 Doris 时,可能存在格式不统一的问题。我们可以通过自研的数据治理平台来实现数据类型的转换,以减少数据导入 Doris 时的建表时间,具体功能包括:
在与社区的交流中,我们了解到 Apache Doris Flink Connector 集成了 FlinkCDC,并支持了 MySQL 等关系型数据库的整库同步,无需提前在 Doris 中建表,用户可以直接使用 Connector 快速将上游业务库的表结构及数据接入到 Doris 中,提升了数据同步的效率及一致性。
具体实现为,当 Flink 任务启动后,Doris Flink Connector 将自动识别对应的 Doris 表是否存在。如果表不存在,Doris Flink Connector 会自动创建表,并根据 Table 名称使用侧输出流进行分流,从而实现下游多个表的 Sink 接入;如果表存在,则直接启动同步任务。
参考文档:top="5402">03 数据集成
当前整体架构主要是 DolphinScheduler 进行任务调度,因此我们选择将导入程序打包成 Jar 通过 Shell 方式运行,目前支持 MySQL、Oracle、Doris 数据库类型导入。在运行时候,指定数据库 ID 、查询 SQL 、目标 Doris 表,即可进行数据导入。
经验分享
我们在探索及使用 Apache Doris 的过程中,积累一些实操的经验,在此分享给读者借鉴参考:
数据集成上:
表模型设计上:
分析计算优化上:
未来展望
未来,雨润集团还计划基于 Doris 进行数据血缘管理和数据地图构建,帮助工程师和分析师更好地管理和理解数据,从而提升数据开发的效率。 在血缘管理方面 ,将构建基于 Doris 的血缘管理平台,当用户在开发 SQL 时,可以将图与图之间的依赖关系存入到图数据库中,并通过可视化表展示表与字段间的血缘关系,便于追溯定位问题、提升开发效率。 在数据地图方面 ,计划基于 Doris 来构建数据地图,对表、对库进行主题域划分和数据域划分,并实现主题索引、表索引和字段索引功能,让数据资产的管理与利用更加高效、便捷。