StarRocks实战——vivo基于 StarRocks 构建实时大数据平台

目录

前言

一、数据挑战

1.1  时效性挑战,业务分析决策需加速

1.2  访问量挑战,性能与稳定性亟待提高,支撑业务稳定运行

1.3 计算场景挑战,难以满足业务复杂查询需求

1.4. 运维挑战,用户查询体验需优化

二、OLAP 选型与实践

三、应用实践

3.1 数据链路优化

3.2  列更新

3.3 集群监控告警

3.4 集群弹性部署

四、结语

原文大佬写的这篇StarRocks 实时数仓建设案例有借鉴意义,这里摘抄下来用作学习和知识沉淀。

前言

     vivo需要基于移动终端的制造、物流、销售等各个方面的数据进行分析以满足业务决策。基于 Trino 的架构面临着数据时效、查询性能、并发能力、复杂运维等方面的瓶颈。

一、数据挑战

   在数字化演进的过程中,vivo面临着业务诉求和技术架构方面的新挑战,主要包括时效性要求提升、访问量大、计算场景复杂和运维难等问题。

  vivo原有数据平台是基于Trino+Hive 的架构来实现,通过 Trino 来抽取业务库里的数据(MySQL、Oracle、SQLserver 等),之后将抽取数据写入到 Hive 中,根据业务侧需求进行数仓的加工处理。

1.1  时效性挑战,业务分析决策需加速

    基于Trino+Hive架构的小时级数据时效性已经无法满足业务需求,业务侧需要数仓架构能够实时抽取业务侧数据并加工,从而实现上层报表的实时呈现,以便更好地支持相关的决策分析。

1.2  访问量挑战,性能与稳定性亟待提高,支撑业务稳定运行

     随着业务规模向全球发展,vivo 的分销代理系统覆盖用户量级飞速增长,营销、计价、订单、库存等业务系统均需要实时数据来保证销售业务精准稳定运营,这使得原有数仓架构的访问量持续增长,同时,随着各种大数据分析相关新业务的上线, Trino 负载越来越高,逐渐无法满足访问量持续增长带来的查询压力

1.3 计算场景挑战,难以满足业务复杂查询需求

    在业务侧的实际分析需求中,经常会有十几张表 Join 的场景,业界存在 Flink 和 Trino两种方案。

  方案一是在写入数仓前利用Flink等提前做好相关表的Join计算,将其加工成大宽表写入数仓中,但Join后的数据存储占用代价高

  方案二是直接将各个维度存储在数仓中,分析查询的时候,分析查询的时候再进行Join计算,但 Trino 在处理多表 Join 时性能一般,难以满足业务侧实际的查询需求。

  这两种方案都没有办法很好的平衡表Join的性能和数据存储占用的问题。

1.4. 运维挑战,用户查询体验需优化

    在实际运维使用Trino的过程中,发现Trino不支持高可用和多副本的问题,在业务高峰期,Trino 负载较高,会影响到数据平台的稳定性和用户查询体验,降低业务决策效率,甚至有可能收到用户对数据平台的投诉。

二、OLAP 选型与实践

    IT 部门调研了几款当前比较流行的 OLAP 引擎,包括 Trino、Clickhouse、StarRocks 和 Doris,并从查询延迟、SQL 类型、并发性能、Join性能和运维成本等多个维度进行了对比:

  • Trino 当前的查询性能和并发能力是无法满足需求的,且 Join 查询的能力也相对较弱。

  • Clickhouse 虽然查询延迟表现很优秀,但由于其支持的 SQL 类型为非标准 SQL,可能会涉及到较多的业务改造,同时其并发能力和 Join 能力也无法满足需求,且运维起来比较复杂。

  • StarRocks 在调研的各个维度上表现都非常好,能够很好地解决当前数仓架构所面临的问题。

  • Doris 在选型时还不支持向量化引擎,其查询表现和 StarRocks 相比还存在一定的差距。

    经过深入调研与测试,IT 部门总结了 StarRocks 的一些优势:

  • 查询性能优秀:查询延迟在亚秒级别,Join 性能优秀,能够满足 vivo 对实时大数据分析的需求

  • 使用方便:支持数据导入、导出等功能

  • 数据模型丰富:支持明细模型、聚合模型、更新模型、主键模型,其中主键模型能够很好地满足vivo大数据的场景

  • 运维成本低:支持高可用、在线扩缩容、tablet数据分片自动均衡

  基于以上的对比与考量,最终选择了使用 StarRocks 来作为数据平台的 OLAP 引擎。

三、应用实践

   在过去 2 年里,IT部门深度应用 StarRocks,并通过 StarRocks 进一步完善数据架构,帮助业务更好地使用和查询数据。

   IT部门对接的业务主要有可视化报表、BI 数据探索、营销分析、驾驶舱、数据大屏等,另外对应的还有研发系统和运维系统。

   vivo 的数据主要来自于手机相关的订单、ERP、MES 以及其他数据,在升级数据分析平台架构后,他们将StarRocks 应用在查询引擎中,为业务团队搭建数据桥梁,支撑上层业务应用更快地查询,更准地分析。

3.1 数据链路优化

   vivo的数据链路分为离线和实时,其中离线链路主要是通过 Trino 进行离线抽数到 Hive 中,经过 Hive 加工处理为大宽表,再推到 Clickhouse 中进行离线场景数据的查询;

   实时链路则通过 Flink 加工后写入到 Kafka 中,然后通过 Flink 消费处理写入到 StarRocks 中进行实时表的查询。

3.2  列更新

   StarRocks 的 Join 性能表现很好,频繁的Join查询会带来计算资源的大量消耗。基于此,vivo IT 部门使用Flink将多个维表打平为大宽表,写入 StarRocks 来进行查询,在节省 StarRocks 计算资源的同时,查询体验也更好。

    针对维表历史数据变更的场景,他们使用 StarRocks 提供的部分列更新(Partial Update)功能,在 Flink 写入主键模型大宽表的过程中,通过一些简单的配置开启部分列更新,实现以较小的代价灵活地更新大宽表中对应的列数据。

3.3 集群监控告警

  在常规的监控告警方面,由于StarRocks提供了丰富的Metrics接口,便于Prometheus 采集 StarRocks 集群各个节点的状态信息,以供 Grafana 生成各种可视化的监控大盘。

 另外,vivio IT部门还会对集群的审计SQL进行采集分析,通过ELK将各个FE节点的审计日志采集后写入到ES中,通过配置规则,筛选出其中的慢sql,推送到告警系统中,以提醒相应的同事关注及优化

3.4 集群弹性部署

   vivo的业务特点是业务访问量存在波峰波谷,且波峰波谷之间的访问量差异明显、时间界限明显,业务对访问持续时间更短的波峰期性能要求高,服务器资源使用率考核压力大。对于国内集群,vivo IT 部门采取了多集群的模式来分担高峰期的查询访问量通过负载均衡将流量分摊到主备集群。

    海外集群则依赖于 StarRocks 的多副本高可用机制,采用各个节点轮询升降配实现集群配置的扩缩容。具体的流程如下图所示,vivo IT 部门将整个流程通过代码的方式嵌入到运维平台里,通过程序自动化调度执行,提高扩缩容执行的效率。

四、结语

    StarRocks 具有便捷运维、便捷部署与弹性扩缩容能力,同时提供了卓越的查询性能,足以应对vivo 高并发查询场景。

参考文章:

vivo:基于 StarRocks 构建实时大数据分析平台,为业务搭建数据桥梁

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker的网络配置

文章目录 1、网络模式1.1、bridge模式(默认模式)1.2、host模式 2、bridge模式3、自定义网络 1、网络模式 Docker在创建容器时有四种网络模式:bridge/host/container/none,bridge为默认不需要用–net去指定,其他三种模式需要在创建容器时使用…

Spring(22) Spring中的9种设计模式

目录 一、简单工厂模式(Simple Factory)二、工厂方法模式(Factory Method)三、单例模式(Singleton)四、适配器模式(Adapter)五、代理模式(Proxy)七、观察者模…

洛谷p1225 c++(使用高精度)

题解: 一开始我这个代码想到的是使用递归来求解 int digui(int n){int sum=0;if(n==1)sum=1;if(n==2)sum=2;if(n==1||n==2)return sum;if(n>2){return sum+=digui(n-1)+digui(n-2);} } 但是后面发现明显超时,我试图用记忆化搜索来抢救一下,所以就有了下面代码 int di…

前端食堂技术周刊第 114 期:Interop 2024、TS 5.4 RC、2 月登陆浏览器的新功能、JSR、AI SDK 3.0

美味值:🌟🌟🌟🌟🌟 口味:凉拌鸡架 食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly 大家好,我是童欧巴。欢迎来到前端食堂技术周刊,我们先来看下…

Github 2024-03-05 Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-05统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10TypeScript项目1 稳定扩散Web UI 创建周期:512 天开发语言:Python协议类…

数仓实战——京东数据指标体系的构建与实践

目录 一、如何理解指标体系 1.1 指标和指标体系的基本含义 1.2 指标和和标签的区别 1.3 指标体系在数据链路中的位置和作用 1.4 流量指标体系 1.5 指标体系如何向上支撑业务应用 1.6 指标体系背后的数据加工逻辑 二、如何搭建和应用指标体系 2.1 指标体系建设方法—OS…

eclipse搭建java web项目

准备条件 eclipsejdk1.8 (配置jdk环境)apache-tomcat-8.5.97(记住安装位置) 一 点击完成 开始创建javaweb项目 import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.s…

IP传输方式——组播

组播作为IP传输三种方式之一,指的是报文从一个源发出,被转发到一组特定的接收者,相同的报文在每条链路上最多有一份。相较于传统的单播和广播,组播可以有效地节约网络带宽、降低网络负载,所以被广泛应用于IPTV、实时数…

深度学习-Pytorch实现经典VGGNet网络

深度学习-Pytorch实现经典VGGNet网络 深度学习中,经典网络引领一波又一波的技术革命,从LetNet到当前最火的GPT所用的Transformer,它们把AI技术不断推向高潮。2012年AlexNet大放异彩,它把深度学习技术引领第一个高峰,打…

如何利用Flutter来写后端 服务端应用

前言 Flutter是谷歌推出的一款跨平台开发框架,现在属于此领域star最多的框架,其被广泛应用于构建前台界面,但或许很少人知道,他也可以写后端应用。 本文主角 flutter非常著名的getx库推出的get server jonataslaw/get_server:…

广播、组播域套接字的实现

思维导图&#xff1a; 广播模式&#xff1a; 发送端&#xff1a; #include <myhead.h> int main(int argc, const char *argv[]) {//创建套接字int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}//设置套接字允许广播属性i…

VS2022连接数据库以及常用的连接函数

下面是如何配置以及设置VS2022连接数据库 第一步:打开mysql的安装目录&#xff0c;默认安装目录如下&#xff1a;C:\Program Files\MySQL\MySQL Server 8.0&#xff0c;确认 lib 目录和include 目录是否存在。 第二步&#xff1a;打开VS2019&#xff0c;新建一个空工程,控制台…

STM32 | STM32时钟分析、GPIO分析、寄存器地址查找、LED灯开发(第二天)

STM32 第二天 一、 STM32时钟分析 寄存器&#xff1a;寄存器的功能是存储二进制代码&#xff0c;它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码&#xff0c;故存放n位二进制代码的寄存器&#xff0c;需用n个触发器来构成 在计算机领域&#x…

远程桌面连接不上服务器怎么办?

在进行远程桌面连接时&#xff0c;有时候会遇到连接不上服务器的问题&#xff0c;这给我们的工作和生活带来了很多不便。下面&#xff0c;我们来了解一下解决这个问题的方法和工具。 【天联】组网的介绍 【天联】组网是一款异地组网内网穿透产品&#xff0c;由北京金万维科技有…

快速上手:在 Android 设备上运行 Pipy

Pipy 作为一个高性能、低资源消耗的可编程代理&#xff0c;通过支持多种计算架构和操作系统&#xff0c;Pipy 确保了它的通用性和灵活性&#xff0c;能够适应不同的部署环境&#xff0c;包括但不限于云环境、边缘计算以及物联网场景。它能够在 X86、ARM64、海光、龙芯、RISC-V …

Linux网络编程 ——UDP 通信

Linux网络编程 ——UDP 通信 1. UDP1.1 UDP 通信1.2 广播1.3 组播&#xff08;多播&#xff09; 2. 本地套接字 1. UDP 1.1 UDP 通信 输入 man 2 sendto 查看说明文档 #include <sys/types.h> #include <sys/socket.h>ssize_t sendto(int sockfd, const void *buf…

GlusterFS系统内核调优

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 相关文章&#xff1a; 分布式存储——GlusterFS 关于GlusterFS的卷 GlusterFS—新手陷阱 GlusterFS常用命令集 前言 本文总…

深度学习预测分析API:金融领域的Game Changer

&#x1f680; 引言 在这个AI遍地开花的时代&#xff0c;谁能成为金融领域的真正Game Changer&#xff1f;那必然是是深度学习预测分析API。如大脑般高效运转的系统不仅颠覆了传统操作&#xff0c;更是以无与伦比的速度和精度赋予了金融数据以全新的生命。 &#x1f4bc; 广泛…

Doris实战——特步集团零售数据仓库项目实践

目录 一、背景 二、总体架构 三、ETL实践 3.1 批量数据的导入 3.2 实时数据接入 3.3 数据加工 3.4 BI 查询 四、实时需求响应 五、其他经验 5.1 Doris BE内存溢出 5.2 SQL任务超时 5.3 删除语句不支持表达式 5.4 Drop 表闪回 六、未来展望 原文大佬的这篇Doris数…

C# Winform画图绘制圆形

一、因为绘制的圆形灯需要根据不同的状态切换颜色,所以就将圆形灯创建为用户控件 二、圆形灯用户控件 1、创建用户控件UCLight 2、设值用户控件大小(30,30)。放一个label标签,AutoSize为false(不自动调整大小),Dock为Fill(填充),textaglign为居中显示。 private Color R…