qidao123.com技术社区-IT企服评测·应用市场

标题: 湖仓分析|浙江霖梓基于 Doris + Paimon 打造实时/离线一体化湖仓架构 [打印本页]

作者: 玛卡巴卡的卡巴卡玛    时间: 2025-3-30 13:59
标题: 湖仓分析|浙江霖梓基于 Doris + Paimon 打造实时/离线一体化湖仓架构
导读:浙江霖梓早期使用 CDH 产品套件搭建了大数据体系,面临业务逻辑冗余、查询服从低下等问题,基于 Apache Doris 进行整体架构与表布局的重构,并基于湖仓一体和查询加快睁开深度探索与实践,打造了 Doris + Paimon 的实时/离线一体化湖仓架构,实现查询提速 30 倍、资源成本节省 67% 等显著成效。
  浙江霖梓是一家专注于深度学习和人工智能应用的金融创新企业,自 2018 年创建以来,专注于深度学习和⼈⼯智能的应⽤ ,通过构建数据迭代能⼒形成布局化的数据决议产品,为企业提供精准经营决议。同时,提供基于大数据的风控能力的一系列高效便捷的金融服务产品。
然而,随着业务的持续扩展,大数据业务体系的局限逐渐暴露:报表体系计算缓慢、运维成本持续攀升、组件间的高度耦合导致架构稳定性较差等,严峻影响了大数据体系产出服从,因此浙江霖梓引入 Doris+Paimon 重新构建了实时/离线一体化湖仓架构,为反欺诈策略、用户⾏为分析、BI 应用等若干体系提供了高效准确的服务,实现了查询提速 30 倍、资源成本节省 67% 等显著成效
早期架构及痛点

下图是早期的 CDH 架构示意图,MySQL 数据通过 Sqoop 全量导入至 Hive,埋点数据通过 Java 程序清洗后进入 Flume 的 source 端,并最终 sink 到 Hive 的分区表中,离线数仓任务的 ETL 由 Hive 执行,批处置惩罚作业则通过 Spark SQL 运行,所有任务都从 ODS 层出发直接进入到 APP 层。数据开辟与分析工作则依赖 CDH 自带的 Hue 平台,任务调度依赖 easyScheduler,最终与自主研发的报表平台对接,实现数据的可视化。

随着业务扩展,早期架构的局限逐渐暴露:数据采集、变更及分析服从低下的同时,整体运维成本也在持续攀升,而且各组件间的高度耦合低落了架构的整体稳定性。别的,由于各部门未同一指标⼝径,不同取数逻辑的分析结果存在较大差异,使得业务痛点的精准定位变得异常困难,传统的 Hive+BI 体系已无法满足需求。
为了解决上述痛点,浙江霖梓考察了市⾯上较为常⻅的大数据分析组件,如 HBase、ClickHouse、Apache Doris 等,最终从查询性能、写入性能、投⼊成本等⽅⾯评估,最终选择了综合实⼒⾮常突出的 Apache Doris。以下为前期技术选型调研结果:

相较于其他产品,Apache Doris 的核心上风如下:

基于 Apache Doris 的实时/离线一体化湖仓架构


经过七个月的设计与实施,最终完成了基于 Apache Doris 离线 / 实时一体化湖仓同一架构。如上图所示,离线数据通过 DataX 同步、实时数据通过 Flink CDC 采集加工,这些数据最终存储到 Doris 或 Paimon 表格式中。
目前基于 Paimon 的全量数据入湖还在持续完满,原先的部门离线数据通过 Flink CDC 实时入湖,而另一部门会直接进入 Doris 来缩短数据链路。这些数据经过 Doris 同一分析处置惩罚后,最终服务于自研数据服务。在这其中,Doris 集群被灵活拆分为多个资源组,分别满足离线数仓、数据集市、实时业务监控等不同上游服务的数据处置惩罚与分析需求。Apache Doris 的引入,也带来许多显著收益:

   详细可参考 Doris Manager 介绍文档与安装手册
  架构升级实践与调优

01 数据接⼊


02 基于 Doris 的数仓建模

在构建新架构的同时,对数据表也进行了深度重构。基于 OneData 理论和 Apache Doris 的表模型设计,我们从底层建表逻辑出发,经心整理了以下内容,现与大家分享:
ODS 贴源层:使用主键模型备份 MySQL 的原始数据,可以接受 MySQL 历史数据的物理删除,从⽽减轻业务压⼒,低落云上存储成本。
DWD 明细层:主要使用主键模型,为了确保明细数据的准确性,也可以接纳其他模型进行校验。在此层将屏蔽 ODS 层的数据,以进步数据表的复用性。
DWS 汇总层:接纳聚合模型来汇集不同维度的表数据,形成若⼲张 Base 表,后续基于 Base 表进⾏维度上卷或 BI 分析,使 SQL 语句更加简洁、批处置惩罚性能得到提升。
APP 报表层:对接报表体系并定期通过邮件或办公软件发送至业务⽅,以供业务监控与业务决议。 由于该层涉及到基于不同时间字段维度以及维度上卷,因此选用明细模型。

重构后的数据表布局更加简洁,显著提升了 SQL 语句的可读性,也使得数据同步性能,有效减轻了大规模数据全量同步所带来的极重负担,从而避免业务阻塞。
03 结算体系数据回流

早期业务结算体系的核心数据难以复用,资源浪费的同时,数据批处置惩罚的服从也较为低下。引入 Doris 后,基于 Doris 的数仓建模复用了 DM 层的数据,有效支撑告终算代偿、回购对账、账户管理等核心业务需求的实时处置惩罚。别的还接入了风控决议引擎,为其提供了实时反欺诈数据指标,实现了高效实时计算和核心数据回流。
得益于 Doris 精彩的即席查询和实时写入能力,数据回流的调度执行耗时均匀不超过 2 秒,业务体系的灵活性和数据响应速度相比之前进步了 8-12 倍。

04 资源管理与权限控制

改造初期,由于资源管理设置不妥,集群性能未达预期,可以通过调解 Workload Group 的并⾏查询数量、等候队列容量和超时时间,避免多条 SQL 语句抢占资源从⽽低落集群整体性能,别的,调解 Workload Group 的 max_concurrency、max_queue_size、queue_timeout 等参数,避免查询超时。
Workload Group 相干数据开辟的逻辑概念如下:

05 基础性能优化项

早期架构由于缺乏体系性的架构设计理论依据,导致了组件开辟与维护工作十分复杂,既未设置公道的数据分区,也未对存储服从、查询索引等数据管理机制进行公道规划,以是在升级成为新架构时,浙江霖梓全面梳理并提炼业务关键指标,并针对 Doris 的各项基础性能进一步优化,有效进步了离线 / 实时一体化数仓的数据处置惩罚服从。
分区分桶
在建表时设置公道的分区分桶字段,其⼤⼩根据业务查询时间区间与数据体量决定,原理与 Hive 分区分桶基本—致,必要留意的是,业务变更频率较⾼的场景,不发起使⽤⾃动分区。我们综合思量表数据量、增⻓趋势、表使⽤⽅法等环境,设置了动态分区,建表示例 SQL 如下:
  1. PARTITION BY RANGE(k1) ()
  2. DISTRIBUTED BY HASH(k1)
  3. PROPERTIES
  4. (
  5. "dynamic_partition.enable" = "true",
  6. "dynamic_partition.time_unit" = "DAY",
  7. "dynamic_partition.start" = "-7",
  8. "dynamic_partition.end" = "3",
  9. "dynamic_partition.prefix" = "p",
  10. "dynamic_partition.buckets" = "32"
  11. );
复制代码
前缀索引
Apache Doris 的前缀索引属于稀疏索引,表中按照相应的⾏数的数据构成—个逻辑数据块( Data Block),每个逻辑数据块在前缀索引表中存储—个索引项,其⻓度不超过 36 字节,查找前缀索引表时,可以帮助确定该⾏数据地点逻辑数据块的起始⾏号。由于前缀索引内存占⽤较⼩,可以全量在内存缓存,并快速定位数据块。设计原则⼀般依照:<时间字段> + <分桶键> + <主键 id> ,对于 ODS 表, 要确保这些字段不存在 NULL 值 ,否则会导致输出数据不⼀致。
倒排索引
主要⽤于规则明细表与⽇志表中,⽤于快速统计规则路由环境以及关键词出现频次,淘汰资源占⽤率。Table 中的⾏对应⽂档、列对应⽂档中的某个字段,可以根据关键词快速定位其地点⾏,到达 WHERE ⼦句加快的⽬的。
BitMap 去重
BITMAP 类型的列可以在 Aggregate 表、Unique 表或 Duplicate 表中使⽤ ,针对—些特定的场景如 UV 、规则掷中次数进⾏查询加快。SQL 示例如下:
  1. #建表
  2. create table metric_table (
  3. dt int,
  4. hour int,
  5. device_id bitmap BITMAP_UNION
  6. )
  7. aggregate key (dt, hour)
  8. distributed by hash(dt, hour) buckets 1
  9. properties(
  10. "replication_num" = "1"
  11. );
  12. #查询
  13. select hour, BITMAP_UNION_COUNT(pv) over(order by hour) uv from(
  14. select hour, BITMAP_UNION(device_id) as pv
  15. from metric_table -- 查询每⼩时的累计UV
  16. where dt=xxx
  17. group by hour order by 1
  18. ) res;
复制代码
开启执行优化器
在 Doris 2.1.x 版本中,发起启用 Pipeline X 和 local shuffle,以进一步提升复杂查询的执行服从。经过压测,开启 Pipeline X 优化器之后,性能提升了 20-30%。以下是 Pipeline X 优化器开启状态确认步骤:
  1. #查看新优化器是否开启
  2. #确保值全为true
  3. show variables like '%enable_nereids_dml%';
  4. show variables like '%experimental_enable_nereids_dml_with_pipeline%';
  5. show variables like '%experimental_enable_nereids_planner%';
  6. #默认 30,根据实际情况调整
  7. show variables like '%nereids_timeout_second%';
复制代码
此时对 Doris 、Hive 、Spark 进行压测,具体是对 15 个大表执行 join 操纵,每张大表的均匀数量约 13 亿条,测试过程中还涉及了 2 个表之间的笛卡尔积计算。根据执行结果,Doris 均匀耗时只需 6 分钟。相比之下,Hive 执行雷同任务耗时长达 2 小时,而 Spark 则执行失败。
报表优化
ADS 报表层在建表时开启 Merge-On-Write,以提升报表数据响应性能,同时开启⾏列混存以及查询缓存,避免刷新导致静态数据重复查询,影响集群性能。
  1. #开启⾏存
  2. "store_row_column" = "true"
复制代码
总结与规划

截至目前,基于 Doris + Paimon 的实时/离线一体化湖仓架构已为反欺诈策略、用户⾏为分析、业务监控、 BI 应用等若干体系提供了服务,实现查询提速 30 倍、资源成本节省 67% 等显著成效。未来,浙江霖梓将持续扩大 Apache Doris 在内部体系的使用范围,并将对数据湖能力、智能实时应用进行探索及应用:

末了,衷⼼感谢 SelectDB 与 Apache Doris 社区伙伴的相携相伴,我们也会基于 Doris 进⾏离线 / 实时湖仓构建中持续挖掘,力求找到更优的问题解决方案,并回馈至社区。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4