StarRocks 在金融科技行业的存算分离应用实践

news2024/11/20 9:24:11

小编导读:

自从 2023 年 4 月正式推出 3.0 版本的存算分离功能以来,目前已有包含芒果TV、聚水潭、网易邮箱、浪潮、天道金科等数十家用户完成测试,多家用户也已开始逐步将其应用于实际业务中。目前,StarRocks 存算分离上线的场景包含电商 ERP 订单分析系统、金融业务数据分析和制造业设备数据分析。由此可见,StarRocks 存算分离已达到生产可用的高标准。

在本文中,我们将向大家介绍一家已经成功上线存算分离架构的金融科技公司,重点阐述他们如何引入了 StarRocks 3.0 架构。目前,他们所使用的 StarRocks 3.1 存算分离版本已在线稳定运行。

随着互联网迅速演进,金融领域正经历着向智能化和数字化方向的持续转型。作为引领金融领域变革的先锋,金融科技(FinTech)正发挥着重要作用,而在这个变革过程中,大数据技术成为了不可或缺的关键环节。

在这背景下,某国内知名金融科技公司为了构建区域供应链金融科技平台,实现降本增效,做出了一项重大决策:将原有的 Hadoop 集群平滑迁移为 StarRocks。 经过深入的测试和调研,该公司成功地上线了 StarRocks 3.1 版本的存算分离架构。新架构的上线不仅显著提升了查询性能超过 10 倍,精细化了权限管控流程,实现了更实时的数据更新,还极大地减轻了维护工作的负担。

本文旨在详细介绍这家金融科技公司引入 StarRocks 存算分离架构的搭建过程和应用实践。通过深入探究,读者将更清晰地了解这一转型背后的考虑、实施以及取得的成果。

业务背景

数据团队是负责处理和管理企业海量数据的核心团队,为企业决策提供坚实的数据支持。为了推动大数据平台的建设和数据治理工作,我们在早期搭建了基于 Hadoop 的大数据平台,并将历史数据都迁移至 Hive 数仓中。

(旧有大数据架构)

如上图所示,我们的数据仓库 Hive 集成了阿里云 Jindo SDK,底层使用 OSS 存储海量数据。计算引擎我们采用了 Spark,通过在其上方构建了 Kyuubi 网关,实现了多租户和资源隔离,从而进一步优化了计算资源的利用;即席查询,我们选择了 Trino(原 Presto)作为执行引擎;主要的数据治理和开发工作则是使用了 SparkSql+UDF/UDAF。

业务痛点

1. 数据治理链路复杂

在数据治理整个链路上,数据团队通常先用 Presto 进行数据探查,探查完后再通过 SparkSQL+UDF 对数据进行加工,最后通过 DataX 和 SeaTunnel 将结果同步到 MySQL 和 Elasticsearch 中。Spark 任务和同步任务通过海豚调度(DolphinScheduler) T+1 执行。其他部门人员和客户即可在结果库进行数据查询分析。

然而,在数据治理的不同阶段,我们注意到不同部门和团队成员可能会对同一数据内容有不同的理解、计算规则或数据定义存在差异,导致最终在结果库中的数据呈现出不一致性。这可能引发数据口径不一致的情况,需要我们进行数据回溯和调整,以确保数据统计的准确性和一致性。

2. ODS 层数据合并效率太低

由于 Hive 表缺乏主键更新功能,我们在原有的 ODS 层增量数据合并流程中面临一些挑战,不得不针对每天单表几亿行数据,与数十万到几百万行的增量数据进行关联,对执行开窗去重操作并在数据量比对和检查后,采用 INSERT OVERWRITE 的方式来覆盖老数据,从而完成增量数据的合并。然而,这种流程效率较低,往往需要耗费长达两个多小时的时间来完成 ODS 层的增量数据合并工作。

3. 大数据量数据查询慢,产出时间长

由于集群的磁盘空间不足以存放几十 T 的数据量,为了解决这一问题,我们在大数据平台上引入了 JindoSDK 并将底层存储从 HDFS 切换到 OSS。尽管这种改变能为数据存储的扩展性带来一些好处,但在进行 Spark 批处理任务时,却导致了任务执行时间的显著延长。经常一个工作流需要几个小时完成,一旦修改调整一点加工逻辑,就需要从头开始加工计算,整体的数据产出时间很长。

4. 大数据集群稳定性差,维护成本高

在 Spark shuffle 过程中,大量的中间数据需要被写入磁盘,导致 ECS 的磁盘 I/O 经常打满。使用 Spark 初期,集群因为各种问题报错,以及机器磁盘被打满,平台每天都要重启集群 2-3 次,严重影响了生产环境可用性。另外,由于大数据集群中涵盖了众多组件,需要每天检查外加每周定时巡检。在数据治理的同时还需要大量时间去维护整个集群,这对开发和运维人员造成了不小的负担。

原有集群:


(CDH 集群监控)


(CDH 物理节点监控)

针对现有大数据架构上面提到的各种问题,我们大数据团队积极寻找各种解决方案,希望使用更先进的架构来取代老的大数据体系。经过详尽的调研,最终我们将目光锁定在 StarRocks。StarRocks 作为新一代云原生湖仓一体架构的数据分析平台,其具有性能优异、场景丰富和运维简单等优点,是我们内部统一数据处理架构的理想选择。

同时,考虑到我们一直采用存算分离架构来处理大数据,我们也希望 StarRocks 能具备存算分离架构以节约成本并减轻运维负担。调研之时,我们也恰巧赶上社区推出了 3.0 版本,我们毫不犹豫第一时间进行了测试和体验,并体会到其性能的优越(详细的测试报告请见:https://forum.mirrorship.cn/t/topic/7075)。测评后,我们立刻上线了 StarRocks 3.0 存算分离版本,随后立即升级使用 3.1.0 版本,并运行在存算分离模式。整个集群由 3 个前端节点(FE)和 8 个后端节点(BE)组成,其中 FE 为 3 台 32G 的 ECS 组成高可用,而 BE 部分则采用了32C 128G 2T 磁盘的 ECS。所有业务数据都存储在 OSS 中。

自今年 3 月开始内测存算分离,目前上线存算分离已有两个月。我们已成功完成对整个 ODS 层业务数据的迁移,总数据量已达到 4TB。接下来,我们将详细介绍一下 StarRocks 3.0 存算分离版本所具备的优势,以及它为我们带来的显著价值:

StarRocks存算分离优势

1. 优势一:性能提升 10 倍以上

过去,我们使用 Spark 进行批处理任务时,任务速度缓慢,导致开发效率低下。然而,通过采用 StarRocks 存算分离的新架构,尽管数据仍然存储在 OSS 中,但任务的执行速度相较于 Spark 任务提升了 10 倍以上。 这一巨大的性能提升缩短了任务执行时间,从而显著增加了开发效率。

(性能测试数据)

测试结果显示,即使关闭了 Cache,相比 Spark SQL 等最高也有近百倍的性能提升,让我们在享受存算分离便利的同时还能拥有之前未曾体验的极速性能。

2. 优势二:权限管控流程更加简单和精细化

在 CDH 平台中,权限管控一直是一个复杂而繁琐的问题。原先我们使用 Kerberos 认证,但无法实现对库级别和表级别权限的细化控制。这意味着开发、运营和算法团队都能够访问所有数据,导致数据的安全性受到了很大的影响。

与之相比,StarRocks 采用了基于角色的访问控制(RBAC)权限模型,大大简化了权限管理流程。我们能够实现库级别和表级别权限的细粒度控制,这在适应多业务线的场景中尤为重要。 用户与角色的分配也更加灵活。对非公开的财务数据,我们能够为个别用户单独授权访问某个库或特定表的权限,从而极大地提升了数据的安全性。 这正是我们急需的功能,为数据安全提供了坚实保障。

3. 优势三:支持主键模型,数据更新更实时

StarRocks 3.1 版本的存算分离架构已经引入了主键模型表的支持。 通过主键模型的应用,我们成功地克服了老架构中每天只能合并百万级增量数据的限制。通过简单的 update 语句,我们能够轻松将增量数据同步至 StarRocks。内部通过高效的数据更新策略,我们能够迅速完成数据更新操作。 目前,线上大多数表都已经使用了主键模型稳定运行着。

4. 优势四:支持部分列更新,大幅降低维护工作

在 Hive 数仓中,更新单条数据或部分列的操作是相对复杂的,只能通过创建临时表进行 insert into 或是 insert overwrite 整表覆盖。这对于需要频繁更新单条数据或部分列的财务非公开数据而言,维护工作非常繁琐。

然而,一旦我们将财务非公开数据迁移到了 StarRocks 的存算分离架构下,就能够轻松实现对单个企业的财务数据进行单条数据的更新,或是在财务统计口径变化时对整表进行部分列的更新。 这种方式维护起来非常方便,大大提高了数据的加工效率。

5. 优势五:架构简单易运维

原先的大数据平台涵盖了许多组件,如 Spark、Yarn、Hive、Trino、Zookeeper 和 HDFS 等,复杂的架构加上人力的紧张,整个系统的维护变得异常复杂和繁琐,令人应接不暇。然而,引入 StarRocks 后,整个架构得到了显著简化。StarRocks 仅包括 FE 和 BE 这两个核心组件,并且在存算分离版本中,只依赖一个外部对象存储服务(例如 OSS)。相比存算一体架构,存算分离架构也并未引入额外的组件,运维起来极其方便。

6. 优势六:社区活跃

自从 StarRocks 3.0 版本推出后我们就开始着手测试,从测试到上线只用了短短 3 个月的时间。值得一提的是,社区在问题响应方面的速度非常迅速。我们遇到问题后,通常只需在社区群里提问,基本上当天就能得到解决方案并修复问题。令人惊喜的是,我们还发现社区在存算分离的功能和性能方面迭代速度极快。从 3.0 版本刚推出到 3.1 版本的主键模型基本成熟,每个版本都为我们带来了惊喜。因此,接下来我们也计划密切跟进社区的迭代步伐,以便为业务带来更大的价值。

StarRocks 存算分离实践

借由引入 StarRocks,我们成功地取代了原有的大数据集群,以 StarRocks 统一了整个大数据平台。通过存算分离业务数据仍然存储在低成本的对象存储中,计算节点则可以根据业务需求随意进行扩容和缩容。


(StarRocks 存算分离版本&配置信息)

1. 历史数据迁移

首先,我们在 StarRocks 创建主键模型表,并设定按天动态分区。为了完成 ODS、DWD、DWS 和 ADS 层的历史数据迁移,我们通过 Broker Load 任务直接从 OSS 读取 ORC 文件并同步到 StarRocks 中。Broker Load 任务导入速度十分惊人,多次导入操作的平均速度达到约每秒 70 万条数据。

导入样例–生产 Broker Load:
导入一张 3.2 亿数据量的业务表,耗时 433 秒。

2. 增量数据更新

针对增量数据,我们以前是创建 Hive 的 JSON 格式表,并将 FTP 中 T+1 增量的 JSON 直接传输到 OSS 中。目前,我们通过 Python 代码实现了将每个表的增量 JSON 文件通过 Stream Load 事务接口写入 StarRocks 的主键模型表。当遇到 JSON 文件过大时,我们会提前切割 JSON 文件再写入,确保每个文件大小不超过 10GB。我们同时运用了 4 个并发的 Stream Load 任务,导入的平均速度大约是每秒 6 到 7 万条数据。

导入样例–生产 Stream Load:
下图所示,我们导入了一个 3.3GB 的 JSON 文件,总数据量 244 万条,导入耗时 37.4 秒。

3. ETL 任务转化

由于 StarRocks 兼容 MySQL 协议,我们将原有的 SparkSQL 改造成类 MySQL 语法,关联查询再以 insert overwrite 的方式从全表操作转变为只涉及 T+1 分区数据进行关联写入目标表。在 Dbeaver 中使用 MySQL 驱动即可查询 StarRocks 中的存算分离表,加工逻辑准备好后放入调度平台 T+1 执行即可。我们还使用异步物化视图来替代一些临时表,以加速查询过程。

4. 大数据量查询写入优化

  • **算子落盘+分区裁剪优化:**在大数据量查询中,初期数据量太大经常导致 BE 因为 OOM 失败。通过开启新版本的算子落盘功能,同时进行分区的裁剪优化,有效缩小了数据查询范围,原来的大查询再也不会出现问题了。
  • **物化视图加速查询:**对于数据治理过程中需要使用的临时表,或者是那些查询频率高、耗时长的查询,可以构建异步物化视图,在关联查询中可以无感知进行查询加速。
  • **聚合模型优化指标统计:**明细数据经过轻量汇总统计写入聚合模型表,降低统计延时。原来需要小时级别聚合的指标降低到秒级聚合。

存算分离的三步规划

我们在 StarRocks 存算分离架构下按照三个步骤进行大数据架构的调整,其中第一和第二阶段皆已上线:

1. 第一阶段:

使用 StarRocks 来构建指标标签和企业画像系统(StarRocks 作为 ADS 层使用)。 我们的数据将被沉淀并展示在 BI 报表上。具体操作是将指标和标签数据通过 Hive Catalog 计算,然后将汇总数据写入 StarRocks,而明细数据则通过异步物化视图方式写入 StarRocks。最终,BI 报表将连接到 StarRocks 数据源来读取数据。此时,大数据集群与 StarRocks 共存。

2. 第二阶段:

在新的数据需求场景使用 StarRocks 进行数据开发、计算存储。 在开发过程中逐步熟悉 StarRocks 的相关特性以及调优性能。

第一+第二阶段(已上生产):
使用 StarRocks 存储指标、标签以及画像输出到 HBase 以及 BI 报表,部分替代 Trino 即席查询,并通过 Hive catalog+异步物化视图将 Hive 数据导入到 StarRocks 中。

3. 第三阶段(规划中)

弃用大数据 CDH 集群,整体数据链路组件只有 Kafka、Flink 和 StarRocks。

后在第三阶段,我们计划用 StarRocks 替换掉现有的大数据集群,实现极速统一的湖仓一体架构。数据存储和计算分离,存储层在 OSS 中,而计算节点可以根据业务需要任意扩缩容。 这样一来可以避免集群组件繁多,维护麻烦的问题。

总结

自 StarRocks 社区推出 3.0 版本以来,我们便在生产环境中开始使用它。StarRocks 取代了原有的多套计算引擎,性能优异,架构简单清晰,运维方便。

通过使用 StarRocks,我们成功地统一了数据管理与分析,让运营、算法和数据开发团队能够共享同一份数据,这打破了数据壁垒,同时也确保了数据更高的一致性。

StarRocks 同时支持主键模型和聚合模型,可以满足绝大多数业务需求。为增量数据创建主键表,原先数小时合并的任务,缩短至十几秒的 Stream Load,极大的提升效率的同时简化了开发人员负担,用户体验非常出色。

我们实现了与 Hadoop 生态的无缝对接,从 Hadoop 平滑迁移到 StarRocks 集群,无需依赖外部组件,极大地方便了用户的使用。

StarRocks 在查询性能方面表现非常优越。相较于 Spark,StarRocks 以近乎实时的查询性能为代价带来了更低的机器成本,从而大幅提升了查询效率。StarRocks 在许多场景下进行了优化,包括 Colocate Join、CBO 和 Bitmap 等特性。

最后,欢迎大家多加利用以下资源了解 StarRocks 存算分离:

  1. 云原生湖仓第二期 Meetup --“StarRocks 存算分离技术探索”
  2. 实测结果公开:用户见证 StarRocks 存算分离优异性能!
  3. 兼顾降本与增效,我们对存算分离的设计与思考
  4. StraRocks 3.1 下载地址:https://www.mirrorship.cn/zh-CN/download/community
  5. 存算分离专属讨论群:(详见starrocks公众号同篇文章)

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

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

相关文章

【少年的救赎——放牛班的春天】

风中飞舞的风筝,请你别停下 池塘之底 这是马修在池塘之底写下的日记 他所有的故事,还有“我们”的 1949年一月十五日,在经历了所有领域的挫折后,马修来到了人生低谷期,“池塘之底”像专为他挑选的一般。那是在一个…

19 NAT穿透|python高级

文章目录 网络通信过程NAT穿透 python高级GIL锁深拷贝与浅拷贝私有化import导入模块工厂模式多继承以及 MRO 顺序烧脑题property属性property装饰器property类属性 魔法属性\_\_doc\_\_\_\_module\_\_ 和 \_\_class\_\_\_\_init\_\_\_\_del\_\_\_\_call\_\_\_\_dict\_\_\_\_str…

Gin 框架入门实战系列(一)

GIN介绍 Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点 对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错 借助框架开发,不仅可以省去很多常用的封装带来的时间,…

8.28~~和学长的谈话

对于大二,我还想问问学长有什么建议? 熟练掌握一到两门开发语言,选好专业的重点学习方向,开始全面了解工程实践方面,10个以上工程开发,可自行规划二年级,着重加强基础技能的学习和提升&#xf…

JMeter性能测试基本过程及示例

jmeter 为性能测试提供了一下特色: jmeter 可以对测试静态资源(例如 js、html 等)以及动态资源(例如 php、jsp、ajax 等等)进行性能测试 jmeter 可以挖掘出系统最大能处理的并发用户数 jmeter 提供了一系列各种形式的…

【100天精通python】Day47:python网络编程_Web编程基础

目录 1 网络编程与web编程 1.1 网络编程 1.2 web编程 2 Web开发概述 3 Web开发基础 3.1 HTTP协议 3.2 Web服务器 3.3 前端基础 3.4 静态服务器 3.5 前后端交互的基本原理 4 WSGI接口 4.1 CGI 简介 4.2 WSGI 简介 4.3 定义 WSGI 接口 4.4 运行 WSGI 服务 4.5…

vue3:使用:图片生成二维码并复制

实现在 vue3 中根据 url 生成一个二维码码,且可以复制。 注)复制功能 navigator.clipboard.write 只能在安全的localhost 这种安全网络下使用。https中需要添加安全证书,且在域名(例:https://www.baidu.com&#xff0…

c#多线程—基础概念到“双色球”项目实现(附知识点目录、代码、视频)

总结:视频中对于多线程讲的非常透彻,从线程基础概念—>.net不同版本出现的线程方法—>多线程常出现问题—>双色球项目实践,每个知识点都有代码实操,受益匪浅。附上学习笔记和实操代码。 视频 目录 一、线程、进程概念及优…

新建Spring Boot项目

使用IDEA 来创建: 文件-新建-项目 填写项目元数据 选择依赖项 此处可以先选 web-spring web 关于这些依赖项,更多可参考: IDEA创建Spring boot项目时各依赖的说明(Developer Tools篇)[1] 项目结构介绍 展开项目,此时…

redis应用 2:延时队列

我们平时习惯于使用 Rabbitmq 和 Kafka 作为消息队列中间件,来给应用程序之间增加异步消息传递功能。这两个中间件都是专业的消息队列中间件,特性之多超出了大多数人的理解能力。 使用过 Rabbitmq 的同学知道它使用起来有多复杂,发消息之前要…

socket的TCP和UDP样例

【70天稳扎稳打学完JavaEE初阶】 TCP和UDP的区别及相关的不同应用 UDP实现回显功能一、UdpEchoServer服务器二、UdpEchoClient 客户端写一个 翻译服务器(继承服务器) UDP示例二:展示服务器本地某个目录的下一级子文件列表服务UDP服务器UDP客户…

什么是ChatGPT水印,ChatGPT生成的内容如何不被检测出来,原理什么?

太长不看版 1. 什么是ChatGPT水印? ChatGPT水印是AI以伪随机方式生成的独特tokens序列。该序列用来作为水印,以区分AI生成内容和人类原创内容。 2. 如何规避ChatGPT水印? 一种规避方法是使用其他AI模型改写ChatGPT生成的文本。这会破坏水…

Nat. Mach. Intell 2020 | drugVQA+:准VAQ系统预测药物-蛋白质相互作用

论文标题:Predicting drug–protein interaction using quasi-visual question answering system 论文地址:Predicting drug–protein interaction using quasi-visual question answering system | Nature Machine Intelligence 代码:GitH…

继承AndroidView Model的错误

ViewModelProvider(this)[RegisterViewModel::class.java] 一行简单的代码,总是报这个错误 Caused by: java.lang.NoSuchMethodException: com.xinfa.registerlogin.viewmodel.LoginViewModel. [class android.app.Application] 经过一下午的思索,终于找…

科普:什么是DNS劫持?

DNS劫持又叫做域名劫持,指攻击者利用其他攻击手段,篡改了某个域名的解析结果,使得指向该域名的IP变成了另一个IP,导致对相应网址的访问被劫持到另一个不可达的或者假冒的网址,从而实现非法窃取用户信息或者破坏正常网络…

我们的第一个 Qt 窗口程序

Qt 入门实战教程(目录) Windows Qt 5.12.10下载与安装 为何使用Qt Creator开发QT 本文介绍用Qt自带的集成开发工具Qt Creator创建Qt默认的窗口程序。 本文不需要你另外安装Visual Studio 2022这样的集成开发环境,也不需要你再在Visual St…

【单片机】有人WH-LTE-7S1 4G cat1 模块连接服务器,教程,记录

文章目录 4G cat1 模块封装引脚名称功能拓扑图串口模块调试WH-LTE-7S1 4G cat1 模块 我买的这个模块内置了电信卡,不用插电话卡就能用,要插也行,在背面。 ⚫ 5-16V 宽电压供电 ⚫ LTE Cat 1,搭载 4G 网络,低时延&…

2023年腾讯云轻量应用服务器优缺点大全

2023年腾讯云轻量应用服务器优缺点大全,腾讯云轻量应用服务器性能如何?轻量服务器CPU内存带宽配置高,CPU采用什么型号主频多少?轻量应用服务器会不会比云服务器CVM性能差?腾讯云服务器网详解CPU型号主频、内存、公网带…

《存储IO路径》专题:IO虚拟化初探

大家好,欢迎来到今天的科技小课堂。今天我们要聊聊的是一项非常有趣且实用的技术——I/O虚拟化(Input/Output Virtualization,简称IOV)。想象一下,如果把物理硬件资源比作一道丰盛的大餐,那么IOV就是那位神…

Java 若依框架系统工具生成代码,前后端以及菜单添加使用示例

前言 若依框架不多介绍,目前比较流行的一款开源的后台管理框架,主要技术栈 后台spingboot、spingcloud 前端vue2 vue3版本的都有,可以去官方下载看看。 若依框架提供代码生成的功能,方便我们把简单的增删改查前后端代码生成直接…