50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

Apache Doris 在拉卡拉技术实践:统一金融场景 OLAP 引擎,查询提速 15 倍,资源直降 52%

  • 2025-04-11
    北京
  • 本文字数:5181 字

    阅读完需:约 17 分钟

大小:2.30M时长:13:24
Apache Doris在拉卡拉技术实践:统一金融场景 OLAP 引擎,查询提速 15 倍,资源直降 52%

拉卡拉早期基于 Lambda 架构构建数据系统面临存储成本高、实时写入性能差、复杂查询耗时久、组件维护复杂等问题。为此,拉卡拉选择使用 Apache Doris 替换 Elasticsearch、Hive、Hbase、TiDB、Oracle / MySQL 等组件,实现了 OLAP 引擎的统一、查询性能提升 15 倍、资源减少 52% 的显著成效。


拉卡拉(股票代码 300773)是国内首家数字支付领域上市企业,从支付、货源、物流、金融、品牌和营销等各维度,助力商户、企业及金融机构数字化经营。随着实时交易数据规模日益增长,拉卡拉早期基于 Lambda 架构构建的数据平台面临存储成本高、实时写入性能差、复杂查询耗时久、组件维护复杂等问题。为此,拉卡拉选择使用 Apache Doris 来替换 Elasticsearch、Hive、Hbase、TiDB、Oracle / MySQL 等组件,完成 OLAP 引擎的统一,实现了查询性能提升 15 倍、资源减少 52% 的显著成效。

面临的挑战


早期数据平台基于 Lambda 架构建设。左侧部分是批处理,右侧是实时流处理。



为满足不同业务数据需求,两条处理链路的计算结果分散存储在 Hive、HBase、Elasticsearch 、TiDB 和 Oracle / MySQL 多个组件,存储层多栈并存,体系技术繁杂,数据冗余问题较为严重。这样的架构给我们带来了众多的挑战:


  • 报表系统存储成本高: 报表系统采用 Hive 计算和 Oracle 存储,随着业务和数据量的增长,Oracle 的扩容复杂,迫切需要“去 O”。

  • 交易查询系统挑战: 交易系统依赖备库进行查询,但备库的存储周期短(通常一周),且部分场景需与其他主题数据关联查询,Elasticsearch、MySQL/Oracle 难以高效支持星型 / 雪花模型的多表关联查询。此外,部分业务使用 MySQL 作为存储库,分库分表的存储方案也增加了查询的复杂性。难以满足业务侧低延时查询需求。

  • 标签系统构建挑战: 在标签构建过程中,标签数量众多采用宽表存储;标签需要频繁增加,需要数据库能够快速响应 schema 变更;需要支持商户标签点查询和实时多维度查询;且商户标签按域计算后需经常进行数据更新。该架构不能很好处理这种宽表写入、实时更新、快速 schema 变更、多种复杂查询的场景。

  • 实时与离线分析割裂:Elasticsearch 和 MySQL 缺乏 HTAP 能力,需与外部数仓配合使用,Oracle 虽支持混合负载但资源隔离不足,易导致 OLTP 与 OLAP 相互干扰

  • 生态兼容性局限:Elasticsearch 的 SQL 支持不完善,MySQL 分析函数有限,Oracle 与云原生工具链集成弱,难以无缝对接主流 BI 工具实现交互式分析

  • 架构复杂性与运维成本: 早期架构基于多个 OLAP 组件,虽然功能丰富,但复杂的架构增加了运维成本和学习成本,同时也提高了保证多份存储数据一致性的难度。

基于 Apache Doris 打造统一 OLAP 引擎

为解决上述问题,从 23 年起引入 Apache Doris,从 1.2.x 版本升级至如今的 2.1.x 版本。并在 Doris 的基础上相继重构了报表系统、标签系统、对账单系统等关键应用。并陆续新上线了风控营销合作平台、营销平台、交易实时看板等业务。



上图为引入 Apache Doris 的架构图。主要变化在数据存储层,使用 Doris 替换了 Elasticsearch、HBase、TiDB 和 Oracle / MySQL 多技术栈,实现了统一的对外存储查询引擎。统一的平台能够更好地支持数据分析和业务决策,促进企业在降本增效方面取得显著的成效:


  • 服务器数量下降 52%:原本系统架构中同时运行 10 台 HBase、10 台 Elasticsearch 和一套 Oracle 一体机服务器,此外还占用了部分 TiDB 集群和 MySQL 资源。通过引入 Doris,并对架构进行整合优化,我们将原本分散的组件统一替换为一个 10 台规模的 Doris 集群。服务器数量下降 52%。

  • 查询性能提升 15 倍: 引入 Doris 之后,其查询性能相较于之前的组件分别有不同程度的性能提升,尤其是在 Elasticsearch 替换后体现的尤为明显,查询耗时从原先的 15s 缩短至 1s,查询性能提升 15 倍。

  • 开发运维效率大幅提升: 只需要使用和维护 Apache Doris 一个组件,大大简化了运维的复杂性和学习的成本。所有数据都在 Doris 中统一存储和管理,减少了数据的流转、数据管理和数据冗余,提升了开发效率。


此外,Apache Doris 在其他几方面的优势也比较明显:


  • 丰富的生态对接: 兼容 MySQL 协议和标准 SQL 语法,支持 Tableau、Grafana 等 BI 工具直接接入,迁移成本降低 90%。提供 JDBC / ODBC 接口,与 Flink、Kafka 等流批处理框架无缝集成。

  • 高吞吐秒级实时数据接入: 支持 Stream Load(百万行/秒)和 Kafka 直接订阅,延迟 <1 秒,写入吞吐比 ES 提升 5 倍。主键模型 (Unique Key) 支持 UPSERT 和部分列更新,避免全量重写。

  • LakeHouse 支持:可以和 Hive 和 Hudi 中的数据打通,做数据湖查询和处理加速。

金融核心场景实践

01 对账单系统

商户工作台内部的对账单系统,面向商户提供交易信息查询与批量对账单文件下载服务,帮助商户快速掌握交易情况,进行对账核对和经营分析。Doris 作为实时数仓,承担交易明细查询、统计报表生成等核心能力,支持高并发、低延迟的数据服务。



如上图所示,使用 Flink CDC 实时监听和同步 MySQL 中的商户信息、账户信息、产品配置等基础表数据;交易系统将实时增量交易数据写入 Pulsar 消息队列,Flink 消费 Pulsar 中的交易流水数据流,经过处理后实时导入到 Doris。由 Doris 支持多种查询场景,包括:


  • 明细查询:用户可以通过多条件快速定位单笔交易信息。

  • 汇总报表:按天、月或自定义条件生成交易汇总结果。

  • 多表联合查询:结合商户、产品等维度信息进行多表关联分析。

  • 数据下载:支持对账单文件、明细结果的批量导出,方便离线对账。


系统数据量庞大,每日新增数据量达到亿级规模,历史数据保留一年,总数据量达到 20TB;商户对账查询场景具有强烈的时间集中性,高峰期日查询次数达到百万级别,并发请求压力巨大。借助 Doris 优秀的并发处理和极速查询能力,查询 99 分位数响应时长在 2s 以内,结合 Flink checkpoint 控制,数据延迟可控制在 5s,极大保障了商户查询体验与业务稳定性。


  1. Doris 主键模型解决数据乱序

  2. 在构建对账单系统的过程中,上游交易系统在完成数据处理后,由于非同步写入和其他处理步骤的介入,出现数据乱序问题。而 PaaS 消息中间件数据补传或数据片段回放时,也加剧了这一问题。

  3. 我们基于 Doris 主键模型成功杜绝了这一问题,并通过设置 sequence_column 参数,以确保数据的最终一致性。具体来说,数据版本号作为一个整型字段,在交易系统的计算过程中始终保持递增,从而确保数据按照正确的顺序进行处理。


    CREATE TABLE `info` (    `s_no`varchar(64) NULL COMMENT'流水号',    `s_date`date NOT NULL COMMENT '日期',     `s_id`varchar(32)NULL COMMENT 'ID号',    `b_id`varchar(32)NOT NULL COMMENT'唯一标识',    `s_b_ver`int(11)NULL COMMENT'数据版本号',    ...    INDEX idx_s_date (`s_date`) USING BITMAP COMMENT'',    INDEX idx_s_id (`s_id`) USING BITMAP COMMENT''    )ENGINE=OLAP    UNIQUE KEY(`s_no`, `s_date`,`s_id`, `b_id`)    COMMENT'信息表'    PARTITION BY RANGE(`s_date`)    (PARTITION partition_namel VALUES [('0000-01-01'),('2024-06-01')),    PARTITION p_2025 VALUES [('2025-01-01'), ('2099-01-01'))    DISTRIBUTED BY HASH('s_id`) BUCKETS 10    PROPERTIES (    "replication_allocation" = "tag.location.default:3",    "bloom_filter_columns" = "s_eid, s_nno, s_bno, s_n:id, t_no",    "is_being_synced" = "false",    "storage_format" = "V2",    "enable_unique_key_merge_on_write" = "true",    "light_schema_change" = "true",    "function_column.sequence_col" = "s_b_ver",    "disable_auto_compaction" = "false",    "enable_single_replica_compaction" = "false"    );
复制代码


  1. 使用倒排索引优化大表关联

  2. 在优化大表关联的场景中,需要对两个数据量庞大的事实表进行关联操作。这两个事实表虽然都采用了分区存储,但它们的分区时间和业务含义各不相同。在尝试将其中一张表与另一张表关联时,无法准确获取右表的查询范围,通常会导致全表扫描,从而占用大量资源并延长查询时间。

  3. 为了解决这一问题,添加了倒排索引、调整分桶策略以及右表的表结构,经过调整,查询耗时从原先的 200 秒大幅缩短至 10 秒,查询效率提升超过 20 倍。

02 实时交易看板

金融市场瞬息万变,交易者需要实时监控市场动态以做出快速决策。实时交易看板能够提供最新的市场数据、价格波动和交易量信息,帮助用户及时响应市场变化。


在实时交易看板场景中,为了提升交易信息的时效性,原先的架构采用 Java 代码从 TiDB 获取数据,经过计算后再写回至另一套 TiDB,数据加工链路较长,且对外部计算逻辑依赖较重。现在,我们优化方案为使用 Flink 进行实时处理,直接将数据写入 Doris,并在 Doris 内部完成 ETL,极大简化了数据加工链路,同时提升了架构的稳定性和容错能力。



引入 Doris 后,我们进行了以下几项工作,充分发挥了其优势:


  • 集群升级: 将 Doris 集群从 1.2.6 升级至 2.0.7 版本,整体查询与分析性能提升超过 30%。

  • 采用 Merge-on-Write(MoW):对于主键模型的存储机制由 Merge-on-Read(MoR) 优化为 Merge-on-Write(MoW),有效避免了写入过程中多版本数据合并的问题,大幅提升了并发查询分析的效率。

  • 部分列更新: 对于退款和调账等场景,需要对历史数据的部分字段进行修改。借助主键模型的部分列更新能力,可高效执行局部字段变更,无需重新写入整行数据,从而提升更新效率。

  • 友好生态: Doris 与 Flink 生态友好,通过 Flink + Doris Connector,实现流式数据无缝对接,简化数据加工链路,提升架构的稳定性和容错能力。

03 实时风控场景

在风控场景中,风控系统和风控人员通过多维度筛选条件,从海量历史交易数据中快速定位可疑交易记录,并结合历史交易行为,全面了解交易背景和细节。不仅为风险评估和策略调整提供重要依据,同时也支持人工干预和决策,使风控反应更加敏捷、精准、高效。



在引入 Apache Doris 之前,实时风控场景主要依赖 Elasticsearch 实现,但存在诸多问题:开发复杂度高,查询性能无法满足业务需求,且最核心的痛点在于 Elasticsearch 不支持 Join 操作,难以进行多表关联查询,严重限制了风控场景下对交易背景和细节的综合分析能力。而替换为 Doris 之后,其展现出多项显著优势:


  • 灵活的 Schema 变更能力:在风控场景中,业务需求不断演进,要求数据库具备灵活的 Schema 变更能力。Doris 提供 Light Schema Change 支持灵活的字段和索引的增删修改。相比 Elasticsearch 需要通过 Reindex 进行 Schema 变更,Doris 的 Schema Change 机制更加高效、灵活,极大提升了数据管理的便捷性和业务适应性。

  • 标准 SQL 查询接口:Doris 提供标准 SQL 查询接口,兼容 MySQL 协议,开发团队能够以熟悉的 SQL 方式高效查询和分析数据。相比之下,Elasticsearch 使用 DSL 查询语言,学习成本较高,复杂查询编写难度大。

  • 强大的多维分析和复杂查询能力:随着风控业务复杂度的提升,对多维分析和多表关联的需求越来越频繁。 Elasticsearch 在处理这类复杂查询时存在局限,特别是在多维度聚合统计、复杂的多表 JOIN、子查询和窗口函数等场景中,无法满足需求。引入 Doris 后,不仅能够高效处理大规模数据,还在多维度聚合、复杂查询和多表关联、子查询等方面更加友好。

  • 查询性能 15 倍提升: 在性能方面, Elasticsearch 查询响应时间长达 15 秒,尤其在数据量大或查询复杂的情况下,响应速度难以满足业务需求。相比之下,Doris 在相同场景下能够将查询响应时间控制在 1 秒以内,显著提升了查询效率。 而且在高并发、大数据量的查询处理上,相较于 Elasticsearch 优势更加明显。

结束语

随着业务复杂度和数据实时性要求的不断提升,未来拉卡拉也将在以下几个方向持续推进:


  • 加大 Lakehouse 场景应用: 加大 Lakehouse 建设,将 Hive 的报表结果数据全部迁移至 Doris,解决 Hive 在时效性和交互性不足的问题,提升查询体验,满足实时查询和多角度分析需求。

  • 加大数据加工能力建设: Apache Doris 除了支持高速查询外,在数据加工和模型构建方面也具备强大能力。后续将重点投入离线计算场景,利用物化视图的建设,实现更灵活的数据建模方式,提升对复杂指标和报表场景的支撑能力,为实时分析、风险监控、指标计算等场景提供更强算力保障。

  • 跨集群复制 CCR 的应用: Apache Doris 在 2.0 版本中实现了跨集群复制(CCR)功能,未来将基于 CCR 功能在异地灾备、数据同步等场景进行应用,以提供更为安全可靠的使用体验,确保业务的稳定连续运行。

  • 更多场景覆盖、高 SLA 保证和资源隔离落地: 随着更多业务场景逐步迁移至 Apache Doris 集群,当前也在积极规划混合场景下的资源管理策略。通过合理的资源隔离、以及按需拆分集群等方式,进一步优化资源利用效率,提升系统整体弹性,保障各类业务系统在高并发、高负载情况下的高 SLA 要求。

2025-04-11 17:1210266
用户头像
李冬梅 加V:busulishang4668

发布了 1180 篇内容, 共 802.0 次阅读, 收获喜欢 1300 次。

关注

评论

发布
暂无评论

要直播啦!KaiwuDB 蓄力时序存储引擎

KaiwuDB

KaiwuDB

探索 Apache Paimon 在阿里智能引擎的应用场景

Apache Flink

大数据 flink paimon Apache Flink Apache Paimon

ETL数据集成丨使用ETLCloud实现MySQL与Greenplum数据同步

谷云科技RestCloud

MySQL greenplum ETL 数据集成 ETLCloud

内推失败!

王磊

项目

淘宝/天猫商品详情API接口在电商数据整合中的作用

技术冰糖葫芦

API Explorer API 编排 API 文档

开源即正义,3D软件Blender设计指南

inBuilder低代码平台

开源 体验

全过程的区块链项目包装孵化都包含啥?

区块链项目一站式包装孵化

实现经典网络 ECS 实例内网互通的方案

极客天地

使用 bend-ingest-kafka 将数据流实时导入到 Databend

Databend

高效存储的秘诀:bitmap 数据结构在标签中的应用

袋鼠云数栈

数据结构 BitMap 标签 用户画像 标签体系

软工智库|低代码篇(一)——低代码开发平台发展趋势是什么?

电子标准院软工研究室

常用网络命令 dig 详解及使用示例

不在线第一只蜗牛

网络 dig

MobPush for Uni-app

MobTech袤博科技

开发者,产品动态,java

软件测试学习笔记丨JUnit5动态测试规则

测试人

软件测试

区块链项目包装孵化都包含哪些东西,一站式了解不迷路!

区块链项目一站式包装孵化

OpenAI 向少部分用户推出 GPT-4o(S2S)模型;Meta 发布 3D Gen AI 模型丨 RTE 开发者日报

声网

万字长文讲透微信小程序的底层架构

landred

微信小程序

软工智库|低代码篇(二)——低代码开发平台内涵是什么?

电子标准院软工研究室

一文读懂DNS解析原理、设置步骤、生效时间和常见问题

国科云

MobPush最佳实践——华为厂商离线消息排查

MobTech袤博科技

开发者,产品动态,java

Apache Doris在拉卡拉技术实践:统一金融场景 OLAP 引擎,查询提速 15 倍,资源直降 52%_数据库_SelectDB_InfoQ精选文章