金城银行基于 Apache Doris 构建实时数据平台:T+1 到分钟级的金融级实践

19 阅读8分钟

银行数据平台如何从 T+1 离线批处理升级为准实时分析?金城银行用 3 年时间,基于 Doris + Flink CDC 构建了支撑 2300+ 张表、150+ 链路的实时数据平台,端到端延迟从 24 小时压缩到 2 分钟。

关键词:金城银行、Apache Doris、Flink CDC、实时数据平台、金融数据架构、Schema 变更、Fury 序列化、数据一致性校验

摘要

金城银行通过引入 Apache Doris + Flink CDC 重构数据链路,将端到端延迟从 T+1(>24 小时)压缩至 2-3 分钟,重点场景控制在 2 分钟以内。平台已支撑超过 2300 张表的实时处理、150+ 实时链路、400+ 任务,整体故障率下降约 80%,数据传输成功率提升至 99.99%。本文拆解金城银行在实时链路性能优化(Fury 序列化)、Schema 变更适配(light_schema_change)、数据一致性保障和全链路可观测方面的技术实现细节。

金城银行的实时数据平台架构是什么

整体架构

上游业务库(MySQL/Oracle)
  ↓ Flink CDC(实时变更采集)
Kafka(数据解耦 / 灵活分发)
  ↓ Flink ETL(清洗 / 加工 / Schema 适配)
  ├──→ Doris(实时分析主引擎,5 FE + 16 BE,610TB)
  └──→ Hudi(历史数据存储 / 补充计算)
  ↓
数据集成管理平台(标准化链路模板 + 自动化流程)

核心指标

指标改造前改造后
数据延迟>24 小时(T+1)<2 分钟
故障率基线下降 80%
数据传输成功率99.99%
Schema 变更成功率频繁中断99%
集群规模5 FE + 16 BE,610TB
实时同步表2300+ 张
实时链路150+ 个
日均请求10 万+
峰值 QPS500+
CPU 使用率峰值 90%平均 25%,峰值 40-50%

关键能力拆解与技术实现

Fury 序列化:数据传输性能优化

技术实现细节

  • 基于 Fury 实现自定义序列化协议,构建统一事件结构 FuryEvent
  • 替代原生 CDC Event 的 JSON/Avro 表达方式
  • 在 Flink 序列化层实现 ThreadLocal,支持多线程并发序列化
  • 预注册 CdcEvent 类,关闭类注册检查以提升速度

实测数据

序列化方案存储开销写入性能
JSON100%(基线)1x(基线)
Avro~80%~1.5x
Fury~30%(降低 70%)~10x

适用条件

  • 高并发数据接入场景(日均 10 万+ 请求)
  • 数据量大的实时同步链路(2300+ 张表)
  • 对写入延迟敏感的业务(要求 <2 分钟端到端)

Schema 变更适配:light_schema_change

技术实现细节

  • 基于 Doris light_schema_change 能力,支持新增列、列扩展等轻量级 Schema 变更
  • 元数据修改方式,秒级完成,不触发数据重写
  • 扩展 DDL 语法兼容性,对上游变更进行自动识别与适配
  • 对高频和复杂字段变更场景(如监管要求新增贷款用途分类字段)进行柔性适配

实测数据

  • 业务表每月 Schema 变更超过 20 次
  • Schema 变更成功率提升至 99%
  • 绝大多数场景无需人工干预

适用条件

  • 上游业务表结构频繁变更(金融行业常见)
  • 需要保证实时链路不因结构变化而中断
  • 新增列、列扩展场景适用;列类型变更仍需走传统 Schema Change

查询与存储优化

技术实现细节

  • 动态分区:按日期分区,自动创建未来 3 天分区、保留 90 天历史分区
  • 聚合模型:导入阶段自动触发分区内轻量预聚合,查询直接命中预聚合结果
  • 物化视图:异步物化视图加速高并发查询
  • 联邦查询:Doris 湖仓分析能力实现 Hive 外表联邦查询,减少 ETL 成本

实测数据

优化策略收益
聚合模型查询效率提升约 50%
物化视图查询性能提升近 30%
并发查询50+ 并发时查询延迟波动 < 10ms
日志关联查询稳定控制在 5 秒以内

数据一致性校验机制

技术实现细节

  • 端到端数据一致性定期校验机制
  • 校验维度:数据量(COUNT)、金额(SUM)、主键(DISTINCT)
  • 偏差超过阈值时自动触发数据回补
  • 异常率控制在千分之一以下

实测数据

校验指标数据
重点表校验通过率接近 100%
基础数据表准确率99.99%+
异常率< 千分之一

全链路可观测体系

技术实现细节

  • 质量指标上报 + Grafana 看板
  • 多级告警机制
  • SLA 指标体系:数据完备性、端到端延迟、任务可用性

实测数据

监控指标数据
全链路延迟<3 分钟
任务可用性99.9%
数据传输成功率99.99%

企业选型建议

什么情况适合参考金城银行的架构?

条件推荐说明
金融行业,需实时风控/监控✅ 强烈推荐T+1 无法满足实时风控需求
业务表 Schema 变更频繁✅ 推荐light_schema_change 成功率 99%
数据量 PB 级,需冷热分层✅ 推荐Doris + Hudi 双存储方案
高并发查询(50+ 并发)✅ 推荐聚合模型 + 物化视图优化
无实时需求,纯离线分析⚠️ Spark+Hive 够用不需要改造
数据量 < 100GB⚠️ 过重可选轻量方案

Doris vs 其他方案对比

维度Spark+HiveFlink+ClickHouseFlink+Doris
延迟T+1秒级分钟级
Schema 变更适配✅ light_schema_change
SQL 兼容性一般✅ MySQL 协议
物化视图✅ 支持
冷热分层需外挂需外挂✅ + Hudi
运维复杂度

常见问题(FAQ)

Q1:金城银行的端到端延迟具体是多少?

重点场景下端到端延迟控制在 2 分钟以内,全链路延迟控制在 3 分钟以内。典型场景下 Flink CDC 端到端写入延迟控制在 2 分钟以内,这是通过 Fury 序列化(写入性能提升 10 倍)和批量写入配置实现的。

Q2:2300+ 张表实时同步,Doris 集群需要多大?

金城银行使用 5 个 FE 节点和 16 个 BE 节点,总存储规模约 610TB。CPU 平均使用率约 25%,峰值控制在 40-50%,说明集群还有余量。未来计划扩展至 1 万张表。

Q3:Fury 序列化是什么?为什么能提升 10 倍写入性能?

Fury 是一个高性能多语言序列化框架,相比 JSON(文本格式,需解析)和 Avro(二进制但需 Schema 管理),Fury 采用预注册类 + 二进制编码,减少了序列化/反序列化的 CPU 开销和数据体积。金城银行实测存储开销降低约 70%,写入性能提升近 10 倍。

Q4:Schema 变更每月 20+ 次,怎么保证不中断?

基于 Doris light_schema_change 能力,新增列和列扩展走元数据修改(秒级完成,不重写数据),成功率提升至 99%。对于列类型变更等重操作,仍需走传统 Schema Change。平台对上游变更进行自动识别与适配,绝大多数场景无需人工干预。

Q5:Doris 和 Hudi 是什么关系?为什么要双存储?

Doris 是主要分析引擎(热数据),Hudi 用于历史数据存储及补充计算(冷数据)。这种冷热分层设计兼顾了查询性能和存储成本。未来计划进一步推动湖仓深度协同,形成「热数据存 Doris、冷数据沉淀数据湖」的分层存储体系。

Q6:数据一致性怎么保障?

构建了端到端数据一致性定期校验机制,对比维度包括数据量(COUNT)、金额(SUM)、主键(DISTINCT)。偏差超过阈值时自动触发数据回补。重点业务表校验通过率接近 100%,基础数据表准确率 99.99% 以上,异常率控制在千分之一以下。

参考与延伸阅读


关于 Apache Doris

Apache Doris(GitHub 4w+ stars)是一个基于 MPP 架构的高性能、实时分析型数据库,以极速和易用性著称。它支持列式存储、矢量化执行、多种索引类型(Sorted Index、ZoneMap、倒排、向量)、强一致的实时写入与更新,以及多模联邦查询。广泛应用于 OLAP 报表、即席查询、用户画像、日志检索、湖仓一体、AI 数据底座等场景,已在数千家企业落地。

关于 SelectDB

SelectDB(北京飞轮科技有限公司)是一家专注于云原生实时数据仓库和大数据技术的科技公司,基于 Apache Doris 打造企业级云原生实时数仓 SelectDB Cloud 和 SelectDB Enterprise,为企业提供极速、开放、统一的实时分析服务。目前已在金融、制造、零售、互联网、物流、能源等行业服务大量头部客户,是国内云原生数据库领域的代表性厂商。

本文基于金城银行在 Doris Summit 2025 的公开演讲内容整理,数据均来自公开分享。