StarRocks实战——首汽约车实时数仓实践

目录

前言

一、引入背景

二、OLAP引擎选型

三、架构演进

四、实时数仓构建

五、业务实践价值未来规划


  原文大佬的这篇首汽约车实时数仓实践有借鉴意义,这里摘抄下来用作学习和知识沉淀。

前言

     首汽约车(以下简称“首约”)是首汽集团打造的网约车出行平台。多样的用户人群、丰富的服务场景、持续升级的智能出行技术,带来业务分析需求的持续增加,分析需求复杂度的持续增加,构建一个强大统一的基础数据层势在必行。

一、引入背景

  2016 年到2021年期间,基于 Hadoop、Spark、Presto 等组件,首约构建了集离线实时并行的 Lambda技术架构的大数据平台。离线计算基于Hadoop+SparkSQL 进行数仓建设,实时计算基于 Kafka+Spark Streaming 开发实时数据特征,数据落地到 MongoDB、MySQL、Redis等数据库,然后通过PrestoDB+Tableau Server 提供可视化的自助分析和交互式报表服务。

    但随着数据累积和数据量的增长,加之精细化的管理运营需求,当前架构日渐吃力,业务上呈现出以下痛点:

1. 多维分析受限:从 2019 年到 2022 年初,业务数据量日增长近 10 倍,数据不断积累,分析维度不断细化,数据分析所涉及的维度越来越多。BI 层基于 Tableau Server 的多维分析报表,更新和查询效率都在变差,维度多的报表每天光刷新就需要几小时。而且基于 PrestoDB 实现的自助 SQL 查询平台并发性能较低,导致出现用户排队等待的情况,对业务方的工作效率产生了影响。

二、OLAP引擎选型

选型过程中,我们针对 StarRocks、ClickHouse、TiDB 做了一些调研和对比:

功能StarRocksClickHouseTiDB、TiFlash
标准 SQL 支持标准 SQL,兼容 MySQL 协议不完全支持支持标准 SQL,兼容 MySQL 协议
分布式Join支持几乎不支持分布式Join,推荐大宽表支持
高并发查询全面向量化引擎,提高并发查询量不支持高并发,官方推荐 QPS为100支持      
运维标准版:支持自动扩容、故障恢复,需要自己实现自动化部署,扩缩容节点、升级等,有一定开发工作
企业版:管理界面,提供集群 DashBoard、SQL Profile、监控报警等功能
依赖 Apache Zookeeper,运维成本运维方便
 
社区开源活跃度高,社区论坛回复快开源社区发展多年,但中文社区支持较少开源社区积极良好
性能读写性能好

单机性能强悍

读性能比 StarRocks 差一些;

写性能好

轻量级分析良好,数据量大时性能不如 StarRocks;
写性能受限于 TiKV,一般
场景纯分析场景纯分析场景使用HTAP 场景
其他生态组件丰富稳定性高

    TiDB 适用在一些轻量级的分析场景,但对于一些数据量大、复杂查询的性能不尽人意。所以我们主要在 ClickHouse 和 StarRocks 中做选择:

  在AP(分析)业务中,不同于以点查为主的TP(事务)业务 ,事实表和维度表的关联操作不可避免。但在一些灵活度要求较高的场景,比如订单的状态需要频繁改变,或者说业务人员的自助BI分析,宽表往往无法满足我们的需求,我们还需要使用更为灵活的星型或者雪花模型进行建模。

   ClickHouse虽然提供了Join的的语义,但使用上对大宽表关联的能力支撑较弱,复杂的关联查询经常会引起 OOM,所以如果使用了ClickHouse,需要再ETL的过程中就将事实表与维度表打平成宽表。而StarRocks提供了Shuffle Join,Colocate  Join,Broadcast Join、Bucket Shuffle Join 等多种Join模式,对于提升联表查询场景性能有着非常大的优势

    通过以上产品能力上的初步对比,我们已经比较倾向于选择 StarRocks。从使用和未来规划角度,我们继续对 StarRocks 进行了评估,双方在以下几方面具有很好的契合度:

  • 1. 能够支撑 PB级别数据量,拥有灵活的建模方式,可以通过向量化引擎、物化视图、位图索引、稀疏索引等优化手段构建极速统一的分析层存储系统。
  •  2.兼容 MySQL 协议,支持标准 SQL 语法,易于对接使用,全系统无外部依赖,高可用,易于运维管理。可以轻松平稳地对接多种开源或者商业BI工具,比如Tableau、FineBI。
  •  3. 支持 MySQL、StarRocks、Elasticsearch、 Hive、Hudi、Iceberg等多种外部表查询数据,重构了数据基础设施,把复杂的分析架构变得简单⽽统⼀
  • 4. 支持 Stream Load、Spark Load、Broker Load、Routine Load、DataX 导入、CloudCanal导入、Spark-connectors、Flink-connectors 多种导入。在离线与实时场景,可根据实际需要灵活选择各类导入方式,稳定且可靠。
  • 5. 对于三方组件依赖少,可以极大减少运维范围和复杂度,并且企业版还提供了可视化的运维管理平台,极大方便了日常运维使用。
  • 6. 社区活跃,问题能够较快获得反馈和解决。版本迭代快,产品能力和产品生态圈都可以看到提升迅速

                           StarRocks 把复杂的分析架构变得简单而统一

三、架构演进

  目前主要是用StarRocks存储大量明细数据,利用时效性高的特点,替换了原有大数据架构分析层中依赖的MongDB、MySQL、Redis 等数据库,从而避免了数据指标的重复开发,极大减少了快速变化业务下的复杂开发工作。未来,计划利用StarRocks强大的物化视图,多种数据Load方式、外表能力、全面完成Presto的替换,进一步提升大数据的Ad-Hoc(数据探索)性能

四、实时数仓构建

  随着数据的增长速度越来越快,精细化运营的诉求不断增加,传统的T+1离线数仓构建模式,很难满足业务运营的增长需求。越早洞察数据,越早拿到分析指标结果,才能帮助业务把握先机。数仓时效性由此逐渐从天级提高到小时级,分钟级乃至秒级。

 于是,我们采用了StarRocks构建了实时数仓:

  • 通过FlinkCDC从kafka摄入业务数据写入StarRocks,构建了实时数仓ODS层,外部调度组件通过SQL完成ETL计算,通过微批方式写入DWD层;DWD层进一步统计聚合写入DWS,或者直接利用物化视图构建DWS层。
  • 流式系统兼容,Flink/Spark Streaming 从 Kafka摄入数据,进行业务计算。通过StarRocks提供的Connector连接器将实时计算结果写入StarRocks实时数仓DWS层,在实时场景中实现统一OLAP分析。

   引入StarRocks 之后,我们已经对订单分析、司机分析、风控分析、算法策略等场景的数据生产过程进行了改造:

  • 1.在订单场景中,StarRocks极速查询能力能够帮助将订单相关的明细数据全部导入并保存起来。数据按天分区,使用主键模型及其部分列更新的特性,将原来存储于多个系统,不同时间更新的数据写入一张订单明细宽表,为订单业务的实时分析提供了统一的数据支撑,此外订单数据在很多场景的分析中都是需要的,因为未来可以通过在主键模型上构建物化视图,为订单分析业务拓展更多可能性,且能够保证相关数据的一致性。
  • 2. 在司机运营分析场景中,通过 Spark/Flink Streaming实时地将用于计算司机运营指标的数据写入到StarRocks,然后利用其强大的多表Join能力,使得多维分析不再完成依赖预处理,让业务运营人员更加及时地掌握当前线上司机数量,上线时长等信息,为其精细化分析和运营提供了保障。与此同时,业务人员的查询性能体验了至少5倍的提升:

  • 3.在实时风控场景下,能否保障数据的时效性,对于企业损失控制具有重要意义。以司机运营活动的作弊识别为例,之前由于作弊识别滞后的时间较长,存在先发奖又扣走的情况,使得司机的体验变差,且有成本损失风险。将风控识别实时化后,能极大避免此类问题。再比如某些渠道待付率异常上涨,若能实时识别、及时干预,就能减少不必要的损失。之前风控特征使用的是离线集群T+1产生的数据,且整个过程需要复杂代码才能实现。

     引入StarRocks后,我们将kafka的数据通过Flink CDC的方式写入到ODS层,之后利用SQL 以微批的方式构建DWD和DWS层,对于实时性高的数据,则通过Spark Streaming/Flink后,再利用StarRocks提供的Connector写入到DWS层,最终指标的计算直接通过SQL查询DWS层即可完成。这不仅使得风控预警更加及时,也对风控指标的快速调整提供了重要支撑,当维度变化或增加新需求时,工作量从5天缩短到2-3天即可完成

  • 4. 在算法策略中,更实时的数据和更加灵活的模型特征构建,可以帮助业务团队更快对市场和竞争上的变化做出响应。以动调策略模型迭代为例,动调是平衡供需的重要手段,动调实验结果时效性的提高,可以极大提升业务团队的开城效率。我们正在尝试和算法团队一起,利用 StarRocks 极速查询的能力来提升实时特征构建效率,加速模型的迭代速度,工期预计缩短 70% 以上,为业务团队更灵活应对业务变化提供助力。

       基于StarRocks搭建实时数仓的过程中,我们也遇到了一些问题,和StarRocks沟通找到的解决和优化方案如下:

  • 1. 在 Flink中使用StarRocks维表做关联时,有时QPS(并发)过高导致整个集群查询性能下降。可以通过规避多条数据一次查询,合理设置分区等措施,提升了查询的并发数
  • 2. 实时数据导入时,有时写入频率过快,可能会导致版本过多/不健康副本的问题。通过设置Spark合并分区或重新分区方式来控制写入,调整Flink Sink并行或者Flink Connector并发的方式控制写入,有效解决了问题:
  • 3. 多表 Join有时出现内存过高的问题。一方面在可接受的查询性能范围内,设置查询的并发度,查询调整内存参数等,另一方面,业务开发层面对查询任务进行分解,数据进行预计算,计算整合预计算结果,分而治之,减小了查询对集群的压力;
  • 4.离线数据通过Broker导入时,会出现BE资源占有过高的问题。我们通过控制导入并发量等措施,保证了整个集群得以健康稳定运行。

五、业务实践价值未来规划

     总体来说,StarRocks 拥有优秀的功能和性能,迭代快速,社区活跃,服务体系良好,能够很好支撑首约大数据部门未来的规划。下一步我们将从以下几方面继续推进:

  • 1.实时场景将全部迁入至StarRocks,成为首约实时数仓统一的数据底座;
  • 2.接入部分离线数据,构建流批一体的数据仓库,实现极速统一的数据分析系统;
  • 3. 加强StarRocks监控报警,包括数据接入,数据产出,任务监控等,及时干预 ,完善整体的运维体系;

   未来,我们也更加期待 StarRocks 后续版本更加强大的功能特性:

  • 1. 支持复杂数据类型,如 Map、Struct等;
  • 2.RountineLoad支持自定义解析,单个任务可导入多张表的数据;
  • 3. Spark-connector 支持 DataFrame 写入;
  • 部分列更新不需要指定,可自适应需要更新列。

参考文章:

首汽约车驶向极速统一之路!出行平台如何基于StarRocks构建实时数仓?

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaWebssh在线授课辅导系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh在线授课辅导系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用 B/S模式开发。开发环境为TOMCAT7.…

Hololens 2应用开发系列(1)——使用MRTK在Unity中设置混合现实场景并进行程序模拟

Hololens 2应用开发系列(1)——使用MRTK在Unity中进行程序模拟 一、前言二、创建和设置MR场景三、MRTK输入模拟的开启 一、前言 在前面的文章中,我介绍了Hololens 2开发环境搭建和项目生成部署等相关内容,使我们能生成一个简单Ho…

车灯修复UV胶的优缺点有哪些?

车灯修复UV胶的优点如下: 优点: 快速固化:通过紫外光照射,UV胶可以在5-15秒内迅速固化,提高了修复效率。高度透明:固化后透光率高,几乎与原始车灯材料无法区分,修复后车灯外观更加…

python 基础知识点(蓝桥杯python科目个人复习计划57)

今日复习计划:做题 例题1:笨笨的机器人 问题描述: 肖恩有一个机器人,他能根据输入的指令移动相应的距离。但是这个机器人很笨,他永远分不清往左边还是往右边移动。肖恩也知道这一点,所以他设定这个机器人…

Web组态可视化编辑器 快速绘制组态

随着工业智能制造的发展,工业企业对设备可视化、远程运维的需求日趋强烈,传统的单机版组态软件已经不能满足越来越复杂的控制需求,那么实现Web组态可视化界面成为了主要的技术路径。 行业痛点 对于软件服务商来说,将单机版软件转变…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:显隐控制)

控制组件是否可见。 说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 visibility visibility(value: Visibility) 控制组件的显隐。 卡片能力: 从API version 9开始,该接口支持在…

Tomcat基础及与Nginx实现动静分离,搭建高效稳定的个人博客系统

目录 引言 一、TOMCAT基础功能 (一)自动解压war包 (二)状态页 1.登录状态页 2.远程登录 (三)服务管理界面 (四)Host虚拟主机 1.设置虚拟主机 2.建立站点目录与文件 二、实…

分享Selenium测试工具用来模拟用户浏览器的操作

执行JS的类库:execjs,PyV8,selenium,node pip list pip install selenium pip install xlrd pip install xlwt pip install PyExecJS pip install xlutils selenium测试工具可以用来模拟用户浏览器的操作,其支持的浏览…

Compiling from source on UNIX(cmake doxygen ant maven ccache)

前言 源码链接 cmake-3.18.0 https://cmake.org/files/v3.18/cmake-3.18.0.tar.gzdoxygen-1.10.0 https://www.doxygen.nl/files/doxygen-1.10.0.src.tar.gzapache-ant-1.10.8-bin https://archive.apache.org/dist/ant/binaries/apache-ant-1.10.8-bin.tar.gzapache-maven-3…

ctf_show笔记篇(web入门---文件包含)

目录 文件包含 78-79:最基础的文件包含,使用伪协议,大小写绕过或者通配符绕过,再或者使用其他方法 ​编辑80-81:可采用日志文件绕过或者大小写绕过(81只能日志文件绕过) ####80-86&#xff1…

【接口测试】常见HTTP面试题

目录 HTTP GET 和 POST 的区别 GET 和 POST 方法都是安全和幂等的吗 接口幂等实现方式 说说 post 请求的几种参数格式是什么样的? HTTP特性 HTTP(1.1) 的优点有哪些? HTTP(1.1) 的缺点有哪些&#x…

电子电器架构 —— OTA测试重要性以及内容

电子电器架构 —— OTA测试重要性以及内容 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证…