从离线到实时:无锡锡商银行基于 Apache Doris 的数据仓库演进实践

news2024/11/20 8:23:59

作者:武基鹏,无锡锡商银行 大数据技术经理

编辑整理:SelectDB 技术团队

导读:为实现数据资产的价值转化以及全面数字化、智能化的风险管理,无锡锡商银行大数据平台经历从 Hive 离线数据仓库到 Apache Doris 实时数据仓库的演进,目前已接入数百张实时表、上百数据服务接口 ,接口 QPS 达到数百万级别,解决了离线数据仓库时效性不足、成本高昂、效率低下等问题,查询提速超 10 倍,为用户提供及时、有效、安全的数据服务及使用体验。

面对大数据、物联网、人工智能等新兴技术给金融行业带来的变革,无锡锡商银行将科技能力和大数据能力的发展放在重要位置。为实现数据资产的价值转化以及全面数字化、智能化的风险管理,基于“业务线上化、风控数据化、架构平台化”三翼一体的科技布局,无锡锡商银行建立了大数据平台,以管理每日流入的海量交易记录与信贷申请数据,借助用户画像、实时报表、实时风控等应用,为用户提供更加及时、有效、安全的数据服务及使用体验。

无锡锡商银行大数据平台经历了基于 Hive 离线数据仓库到基于 Apache Doris 的实时数据仓库演进。通过架构的升级,解决了离线数据仓库时效性不足、成本高昂、效率低下等问题,实现查询速度 10 倍提升,使得银行能够更快感知客户行为,及时洞察异常交易行为、识别和预防潜在的风险。本文将详细介绍无锡锡商银行大数据平台演进历程以及 Apache Doris 在实时查询、营销服务、风控服务等场景的落地实践。

基于 Hive 的大数据离线数据仓库

01 需求场景

无锡锡商银行早期建设了大数据离线数据仓库,主要服务于数据报送、数据风控、数据运营、即席查询及日常取数等场景,需求场景包括且不限于:

  • 数据报送:客户风险、EAST 报送、1104、大集中、征信报送、利率报备、反洗钱、金融基础数据报送等。
  • 数据风控:包含对贷款类风控指标、用户行为指标、反欺诈、贷后预警、贷后管理等风险控制。
  • 数据运营:对 BI 业务报表、管理驾驶舱、行外渠道和行内各系统进行定时批量供数。
  • 即席查询及日常取数:根据业务需求进行数据分析、数据开发及数据提取。

02 架构及痛点

在早期离线数据仓库中,数据主要来源于 Oracle、MySQL、MongoDB、Elasticsearch 以及文件。通过使用 Sqoop、Spark、外部数据源和 Shell 等工具,将数据离线抽取到 Hive 离线数据仓库中,并在 Hive 中通过 ODS、DWD、DWS 和 ADS 分层处理,最终输出结果为应用服务层提供支持。

架构及痛点.PNG

近些年,随着无锡锡商银行业务的发展与扩张,相关业务部门对数据处理的要求也越来越高,离线数据仓库已无法满足新的需求,主要体现在:

  • 数据时效性不足:离线数据仓库使用离线抽取的方案,数据时效性为 T+1,而报表、数据大盘、营销指标、风控变量要求数据实时更新,当前架构无法满足。
  • 数据查询效率低:需满足秒级别、毫秒级的查询响应。离线数据仓库执行引擎主要是 Hive 及 Spark,Hive 执行时会将查询分解为多个 MapReduce 任务,并需读取和写入 HDFS 中的数据,执行时长一般为分钟级别,严重影响查询效率。
  • 维护成本高:离线数据仓库底层涉及技术栈繁多 ,包括 LDAP、Ranger、ZooKeeper、HDFS、YARN、Hive、Spark 等多个系统,这将导致较高的系统维护成本。虽然线上也有 HBase + Phoenix 的实时存储与服务,但由于其组件比较“重”、社区不活跃,且某些特性无法满足实时场景需求,仍然不能完全解决当前的问题。

技术选型

面对离线数据仓库时效性不足、查询效率不高,多个技术栈带来的维护成本高等痛点,实时数据仓库的构建势在必行。在对多个 MPP 数据库进行深入的调研后,无锡锡商银行决定以 Apache Doris 为核心构建实时数据仓库平台。这一技术选型旨在确保平台在数据写入、查询及服务层面均能满足实时业务分析的高要求。选择 Apache Doris 的理由如下:

  • 高效数据更新: Apache Doris Unique Key 支持大批量数据更新、小批量数据实时写入以及轻量化表结构的修改。尤其在处理大量数据和分区时,能够有效避免庞大的修改量和修改不准确的问题,从而提供更加便捷实时的数据更新。
  • 低延时实时写入: 支持秒级别的数据实时写入、更新和删除;支持主键表模型写时合并,可实现微批高频实时写入;并且支持主键模型 Sequence 列设置,可保证数据导入过程中的有序性。
  • 查询性能优异: Apache Doris 多表 Join 能力强大,依托向量化执行引擎、CBO 查询优化器、MPP 架构、智能物化视图等功能,能够实现海量数据的毫秒级查询响应,满足即查即走的数据查询要求。同时 Apache Doris 2.0 版本支持行列混存,在点查询场景可以实现数万并发的毫秒级响应。
  • 平台极简易用: 兼容 MySQL 协议,并提供丰富的 API 接口,能够降低上层应用的使用难度。同时,Apache Doris 架构精简,只有 FE 和 BE 两进程,节点扩缩容简单、集群管理和数据副本管理均支持自动化,具备部署简单、使用成本及运维成本低的特点。

引入 Apache Doris 搭建大数据实时数据仓库

2022 年 4 月,无锡锡商银行引入 Apache Doris 构建实时数据仓库平台。考虑到银行数据规模非常庞大,接入实时数据的同时,再从业务库同步全量历史数据难度较大,因此,初期实时数据搭建主要依托于离线数据。

首先,采用 HDFS Broker 方式高效初始化历史实时数据;同时,借助采集工具 DataPipeline 将数据实时采集至 Kafka 集群中,再由 Flink 写硬编码模式将数据实时写入 Apache Doris 中。最后,借助飞流平台的接口服务能力,将 Apache Doris 作为统一存储与查询引擎,为各业务线提供服务。

飞流平台是无锡锡商银行为应对未来实时业务场景而构建的统一综合平台,主要包含实时采集、实时同步工具、实时数据仓库、实时计算以及数据服务。

引入 Apache Doris 搭建大数据实时数据仓库.png

01 完善数据流转链路

从银行数据特性出发,结合 Apache Doris 功能优势,无锡锡商银行重新思考并完善了数据流转链路:

  • 从离线数据仓库同步历史数据,风险最小化: 文提到,由于银行数据的庞大规模,如果直接从 Oracle 与 MySQL 同步全量历史数据,会导致大量数据流经过防火墙和交换机,引发其他业务请求阻塞和服务超时等问题。为了避免这些潜在的风险和问题,首先基于 Oracle 与 MySQL 批量构建 Doris 表结构,然后使用 HDFS Broker 从离线数仓 Hive ODS 层同步 T-1 全量数据到 Doris 中,从而实现风险最小化。
  • 实时增量抽取,更安全抽取模式: 实时抽取会产生极少量的磁盘 IO、内存、CPU 消耗,为了避免对业务主库有影响,默认认情况下,一般会选择从业务从库或同城灾备库实时抽取。而针对时效性要求较高的业务需求,需要充分评估才能从业务主库抽取数据。
  • 构建 Kafka 层,保证数据一致性: 建立 Kafka 层作为数据中间传输层,以确保数据的有序性和一致性。通过将 Datapipeline 发送的数据的 Key 配置为 Database-Table-PK,并按照同一个维度有序地发送到 Kafka Topic 的某个分区(Partition)。由于 Kafka Topic 各自分区内部是有序存储的,因此下游的消费者可以按照顺序处理数据,避免乱序情况对实时数据仓库数据准确性的影响。此外,Kafka 层可作为数据公共层可开放给营销类、风控类业务等场景使用。
  • 数据实时写入,保证数据不丢不重: 在实际应用场景中,离线链路在 T-1 日的晚上 11 点至早上 6 点进行数据离线跑批,在 T 日 10 点借助 HDFS Broker 方式进行表历史数据初始化。实时链路使用 Flink 直接指向 T-1 的晚上 10 点消费 Kafka Topic ,进行实时数据同步,而在实时消费过程中会出现部分重叠数据。为应对该问题,选用 Apache Doris 的 Unique Key 模型(该模型支持数据幂等性),该模型可快速覆盖重叠数据;并使用 Flink-Doris-Connector 完善实时数据仓库链路,以保证实时数据同步不丢不重。

02 灵活的数据服务

为了提供精准、高效的查询响应,无锡锡商银行采取了以下三种方式来实现数据服务:

  • 离线数据查询:针对离线需求,需要对数据进行快速查询。无锡锡商银行将数据定期从离线数据仓库导入到实时数据仓库 Doris 表中。这样可以在实时数据仓库中快速查询,满足离线数据分析和决策的需求。
  • 简单实时需求:对于不复杂的实时需求,无锡锡商银行利用 Apache Doris 的高效查询能力,在"飞流"平台上提供了直接配置数据服务接口的能力,用户可基于实时数据仓库 ODS 层的 SQL 进行手动配置。通过这种方式,可以快速满足简单实时数据查询的需求。
  • 复杂实时需求:对于复杂的实时需求,无锡锡商银行采用实时 Kafka 数据流和 Flink 轻度计算的方式,将数据流写入实时数据仓库的 DWD 层表中,在"飞流"平台上基于明细表的 SQL 进行再次聚合,并手动配置数据服务接口,以满足复杂实时数据查询的需求。

面向更多样化的服务场景

01 BI 报表秒级查询响应

无锡锡商银行基于 Apache Doris 满足了当日数据分析、日常取数以及 BI 实时报表等多种场景需求,查询响应时间大大缩短,能够在 1 秒内返回查询结果,极大降低了数据分析师的等待成本和服务器资源的消耗。

比如,在 BI 实时报表方面,无锡锡商银行建立实时贷款数据表、实时存款数据表、账户时点余额表等多种报表。**这些报表平均 SQL 代码行数为 253 行,平均响应时间为 1.5 秒。**另外,通过优化查询性能和数据模型设计,无锡锡商银行能够在较短的时间内生成准确的实时报表,为业务决策提供及时的数据支持。

02 支持个性化营销方案

在营销类数据服务方面,无锡锡商银行基于 Apache Doris 丰富客户标签、完善客户精准画像,开展了资产净增活动、艺术家盲盒活动等多种营销活动。通过实时数据的分析,银行能够及时观察活动用户的转化情况,并及时调整运营圈选策略,实现从“千人一面”到“千人千面”的个性化营销。

比如,在资产净增活动和艺术家盲盒活动等营销活动中,无锡锡商银行利用 Apache Doris 实时数据仓库的能力,不断收集、分析和反馈活动数据。通过实时观察用户的转化情况,及时调整运营圈选策略,确保人员和活动之间的匹配度。这种个性化的营销策略使得银行能够更好地满足客户的需求,提升参与度、响应率以及用户粘性。

03 高效的风险识别与控制

Apache Doris 的引入,使得无锡锡商银行能够更快计算出风控特征变量、异常交易行为。以新用户注册为例,当用户填写资料时,系统可以基于实时的风控特征变量,快速判断审批策略结果,及时优化策略模型,保证审批的质量和准确性。

无锡锡商银行还能够及时识别和预防潜在的风险。例如,对于短时间内大量交易、异常交易金额等交易数据,银行可以实时收集并进行监测,以及时发现异常交易行为和欺诈行为。通过实时数据分析,银行可以快速识别潜在的风险,并采取相应的措施进行预防和应对。

另外,无锡锡商银行还利用 Apache Doris 实时数据仓库对客户的信用历史和信贷申请信息进行实时分析。通过快速判断客户申请金额是否符合其还款能力,银行可以及时作出风险评估和决策,从而有效控制信贷风险。

04 七日交易流水表的数据自动更新

在实际应用场景中,交易流水表的数据量非常庞大,涉及交易序号、交易日期、交易类型、交易金额等数据。为确保数据的及时更新,无锡锡商银行选择采用 Apache Doris 动态分区表的特性。该特性可以自动创建分区,并自动删除超过七天的交易流水数据,以实现七日交易流水表的数据自动更新。具体的操作包括以下步骤:

  • 以业务日期构建伪列作为联合主键;
  • 当 ID 数据进行tran_date跨天更新时,代码进行回表操作;
  • 找到数据在 Insert 与分区表中对应的 Date 值,并拼接成 Update Json 更新入库。

七日交易流水表的数据自动更新.png

借助 Apache Doris 动态分区分表特性,不仅能够保证底层主键和服务器稳定运行,还能够自动更新并只保留七天流水交易数据以供分析师查询,并满足百万 QPS 下 1.5 秒查询响应需求

05 高并发点查询

早期营销类与风控类应用场景主要依赖两套 HBase 集群以支持点查服务,然而在实际应用中,会遇到诸如 Master / Regionserver 异常退出、RIT 等问题。为避免该问题,可利用 Apache Doris 高并发点查能力,并在创建 Unique Key 表时,启用 Merge-on-Write 策略,使得主键点查能够经由简化的 SQL 执行路径完成,仅需一次 RPC 即可完成快速的查询响应。

最终通过在三台节点上进行压力测试,在为每台节点配置了 8C、10GB 的情况下,获得了以下显著收益:

  • 在单表包含 5000 万数据的查询场景中,QPS 高达 2.5 万;
  • 在涉及 5000 万数据的多表读写场景中,QPS 同样达到 2 万;
  • 复杂 SQL 查询的稳定性也保持在 QPS 2.5 万的高水平;
  • 在多表实时读写场景中,QPS 亦能稳定在 2.5 万。

结束语

目前 Apache Doris 在无锡锡商银行已经接入数百张实时表、上百数据服务接口 、接口 QPS 达到数百万级别。此外,Apache Doris 作为统一查询网关,显著提升了历史数据分析的效率,与原来分钟级响应时间相比,查询提速超 10 倍。

未来,无锡锡商银行将持续发掘 Apache Doris 优势,并推进其在实时场景中更深度的应用。

  • 在性能表现上:进一步优化高并发点查询、自动分区分桶、执行引擎等能力,以提升数据的查询响应效率;
  • 在负载均衡上:构建双集群,实现架构负载均衡;同时,将完善架构预警与熔断机制,保障业务运行不间断;
  • 在集群稳定性上:实现 Apache Doris 集群的“分工协作”,使其各自承担实时数据仓库的计算与存储、数据服务加速查询等任务,进一步提高系统的稳定性及可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1655110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ifconfig命令找不到 command not found

问题 今天解决虚拟机的网络问题后,使用ifconfig发现报错命令未找到 解决方案 输入yum install ifconfi的程序安装包 yum install ifconfig 如果显示没有可用软件包 ifconfig,错误:。 就输入yum search ifconfig匹配安装包程序 yum searc…

数仓开发,分层(ods,dw,app层)

1、从数据源中导入源数据,到ODS表,作为事实表的数据 2、可以根据自己的开发设计,是否单独分支出来一个维度表,帮助和协助处理源数据表ODS层 和需求层ADS(APP)层 3、现在我们有了一个事实ODS层&#xff0…

力扣每日一题119:杨辉三角||

题目 简单 给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIndex 1 输出…

基于SSM的“小型企业人事管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“小型企业人事管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 登录界面 个人信息页面 用户打卡页面 扣…

C++贪心算法

关于string的系统函数! (注:以下函数只可用于string,不适用其他类型的变量) ① a.size(); 这个系统函数是用来获取这个string变量的长度的,我们通常会新建一个变量来保存他,以便之后使用。 …

跨协议通讯无缝对接:Modbus-BACnet楼宇智能转换器深度解析

在现代化的建筑群里,智能楼宇管理系统如同神经系统,协调着各设备的运行。某大型商业综合体,集购物中心、办公区、酒店于一体,面对着来自不同供应商的设备,如何实现统一管理和高效通讯成了首要挑战。特别是其内部既有采…

区块链 | NFT 水印:Review on Watermarking Techniques(一)

🍍原文:Review on Watermarking Techniques Aiming Authentication of Digital Image Artistic Works Minted as NFTs into Blockchains 1 应用于 NFT 的水印技术 常见的水印技术类型可以分为: 可见 v i s i b l e \mathsf{visible} visi…

STM32快速入门(串口传输之USART)

STM32快速入门(串口传输之USART) 前言 USART串口传输能实现信息在设备之间的点对点传输,支持单工、半双工、全全双工,一般是有三个引脚:TX、RX、SW_RX(共地)。不需要一根线来同步时钟。最大优…

C++ list介绍(迭代器失效)

一、常用接口 reverse逆置 sort排序&#xff08;默认升序&#xff09; 仿函数greater<int> merge合并&#xff0c;可以全部合并&#xff0c;也可以一部分合并 unique&#xff1a;去重&#xff08;先排序&#xff0c;再去重&#xff09; remove&#xff1a;删除e值&#…

Hive SQL Join连接操作用法详解

Hive SQL Join连接操作 1.Hive join语法规则 基本语法&#xff1a; SELECT column_list FROM table1 JOIN table2 ON table1.column_name table2.column_name;JOIN类型&#xff1a; 在JOIN语句中&#xff0c;你可以使用不同类型的JOIN操作&#xff0c;包括INNER JOIN、LEFT O…

水面垃圾清理机器人的视觉算法研究

卷积神经网络是一种分层的数据表示模型&#xff0c;通常由数据输入层、卷积层、池化层、 非线性激活函数、全连接层以及输出结果预测层等组成&#xff0c;其中卷积层、池化层和非线 性激活函数是卷积神经网络中的重要组成部分。此外&#xff0c;有些模型会增加其他的层(归一 化…

C#贪吃蛇

C#贪吃蛇 文章目录 Program.csText1Game.csISceneUpdate.csText2BeginScene.csBegionOrEndScene.csEndScene.csGameScene.csText3GameObject.csIDraw.csPosition.csText4Food.csSnakeBody.csWall.csText5Map.csText6Snake.csProgram.cs using 贪吃蛇.Text1;Game game = new Ga…

pinia持久化出现store和storage的数据不一致的问题

问题描述 突然发现menu的store异常&#xff0c;pinia中查看到store数据正确&#xff0c;但是localstorage中的数据始终没有同步&#xff0c;但user的store没问题&#xff0c;具体如下&#xff1a; menu的store&#xff1a; user的store&#xff1a; 问题原因 进入系统…

[嵌入式系统-72]:RT-Thread-组件:单元测试框架utest

目录 utest 测试框架 ​编辑 测试用例定义 测试单元定义 utest 应用框图 2. utest API assert 宏 测试单元函数运行宏 测试用例导出宏 测试用例 LOG 输出接口 3. 配置使能 4. 应用范式 5. 测试用例运行要求 6. 运行测试用例 测试结果分析 7. 测试用例运行流程 …

mysql中varchar与bigint直接比较会导致精度丢失以至于匹配到多行数据

在mysql中&#xff0c;我们都知道如果一个索引字段使用了函数或者计算那么查询的时候索引会失效&#xff0c;可是我相信在联表的时候我们只会关注两个表关联字段是否都创建了索引&#xff0c;却没有关注过这两个字段的类型是否一致&#xff0c;如果不一致的话索引是会失效的&am…

uni-app实战在线教育类app开发

随着移动互联网的快速发展&#xff0c;教育行业也在不断向在线化、数字化方向转型。开发一款功能丰富、用户体验优秀的在线教育类 App 对于满足学习者需求、促进教育行业的发展至关重要。本文将介绍如何利用 Uni-App 进行在线教育类 App 的开发&#xff0c;让您快速上手&#x…

Python 全栈体系【四阶】(三十九)

第五章 深度学习 八、目标检测 3. 目标检测模型 3.2 YOLO 系列 3.2.4 YOLOv4&#xff08;2020 年 4 月&#xff09; YOLOv4 将最近几年 CV 界大量的研究成果集中在一套模型中&#xff0c;从检测速度、精度、定位准确率上有了明显改善&#xff08;相对于 YOLOv3&#xff0c…

前端项目加载离线的百度地图,利用工具进行切指定区域的地图影像,自定义图层getTilesUrl

百度地图在开发中我们经常使用&#xff0c;但是有些项目是需要在内网进行&#xff0c;这时候我们不得不考虑项目中一些功能需要请求外网静态资源&#xff0c;比如百度地图。只有把包下载到本地&#xff0c;才能让静态资源文件的正常的访问。 目录 获取百度地图开发秘钥 引入在…

yolov8任务之目标检测

对象检测 对象检测是一项涉及识别图像或视频流中对象的位置和类别的任务。对象检测器的输出是一组包围图像中对象的边界框&#xff0c;以及每个框的类标签和置信度分数。当您需要识别场景中感兴趣的对象&#xff0c;但不需要确切知道对象在哪里或其确切形状时&#xff0c;对象检…

网络安全之ACL

ACL&#xff1a;访问控制列表——控制列表&#xff08;策略列表&#xff09;&#xff0c;是一个控制工具。 功能&#xff1a;&#xff01;、定义感兴趣路由&#xff08;控制层面&#xff09;。2、定义感兴趣流量&#xff08;数据层面&#xff09;。 例如&#xff1a; 假设在该…