StarRocks实战——欢聚集团极速的数据分析能力

news2024/11/16 22:41:33

目录

一、大数据平台架构

二、OLAP选型及改进

三、StarRocks 经验沉淀

3.1 资源隔离,助力业务推广

3.1.1 面临的挑战

3.1.2 整体效果

3.2 稳定优先,监控先行,优化运维

3.3降低门槛,不折腾用户

3.3.1 与现有的平台做打通

3.3.2 使用流程产品化

3.3.3 主动深入业务

四、近期规划


  欢聚集团面向的是各个国家的用户市场,数据分析场景就要因地制宜。体现到大数据平台这一层,数据来源多样化,数据分析场景复杂,数据模型复用率低。在这样的业务现状下,原有的 OLAP 引擎已无法满足欢聚集团的整体数据分析需求,下文主要介绍如何基于StarRocks 构建灵活、极速、统一的全新 OLAP 分析平台。

一、大数据平台架构

   数据平台支撑了从数据埋点上报到数据应用的全链路数据服务,提供了埋点管理平台、离线计算调度系统、实时计算平台、数据应用系统等众多数据产品, 实现闭环的一站式大数据平台服务。

   总体架构分层上,可以分为数据集成、存储、计算、分析、应用。OLAP系统是分析层的核心引擎,支撑Ad-Hoc自助分析、多维分析数据服务、BI报表、标签画像等分析场景。

二、OLAP选型及改进

  此前,我们使用 ClickHouse 作为 OLAP 引擎,但随着业务对灵活性要求越来越高, ClickHouse 遇到了难以逾越的瓶颈。因此,我们重新梳理了需求,试图寻找一款更加适合欢聚集团的 OLAP 引擎。针对出海业务的特殊性,大数据团队需要提供非常灵活多变、轻量、高效、包容的数据分析服务:

  • 灵活多变: 相比数据量和性能,灵活性更重要

  • 轻量: 架构要简单,最好能一个引擎搞定所有场景

  • 高效: 使用门槛要低,各种业务都能快速接入使用

  • 包容: 能良好地兼容大数据生态

具体的诉求是:

  • 支持ROLAP、MOLAP分析场景
  • 数据模型支持宽表、星型模型、雪花模型等
  • 同时兼顾数据量(PB)、查询性能(秒级)、灵活性(导数与查询灵活多变)
  • 数据时效性上支持离线批处理、实时流处理秒级可见
  • 数据写入支持Append、Overwrite、Upsert、Delete
  • 高可用、灵活扩缩容、低运维成本
  • 较高的QPS(高并发)
  • 支持分析Hadoop上的数据

  在这种“既要又要还要”的诉求下,选型很困难。OLAP 常用的技术架构有预计算、MPP、索引。我们调研了这三类架构的典型 OLAP 引擎:

  • 预计算架构:代表引擎 Apache Kylin/Apache Druid ,查询性能优越,但缺少灵活性。

  • MPP 架构:Presto/Apache Impala/SparkSQL,灵活性很好,但性能较差,一般在分钟级。

  • 索引架构:ES/ClickHouse,单表查询性能优越,但是 Join 几乎不可用,只能用宽表模型。

 单一技术架构的引擎很难满足需求,因此我们把目标瞄向混合架构引擎:同时具有预计算、MPP 计算、支持索引的引擎。目前市面上这类引擎不多,比较成熟的有 Apache Doris 和 StarRocks。最后选择 StarRocks,原因是 StarRocks 的社区更加活跃,产品的背后还有一支大胆创新的强大技术团队,响应非常及时,我们对 StarRocks 的未来更有信心。

  如上图所示,我们的 OLAP 系统架构非常简单轻量,与大数据平台上下游都做了整合。

 StarRocks原生提供丰富的数据导入方式,Http模式的 Stream load、读 HDFS的Broker load、读消息中间件的 Routing load、Flink Connector、DataX、外表支持等,方便和大数据生态完成数据集成。StarRocks查询支持最为通用的MySQL JDBC 协议,集成到各种BI,数据应用系统几乎无成本。

  目前我们内部整合了 OLAP 系统,下线了 ClickHouse,统一使用 StarRocks 作为解决方案,已经在实时查询、报表分析、监控等业务场景中大力推广,支撑了数百 TB 数据,数十个业务方,数百万查询量/天,总体查询性能 99 分位 200ms。

三、StarRocks 经验沉淀

3.1 资源隔离,助力业务推广

3.1.1 面临的挑战

  我们的 StarRocks 集群目前都是多业务共用,其中部分业务场景是大查询。例如 BI 报表一个Dashboard(数据看板)包含多个图表,打开 Dashboard时,所有图表一起加载,并且一般都是偏分析的SQL,资源开销较大。此时集群资源就有一个高峰,集群查询性能衰减,特别是小查询也会受到严重影响。下图中可以看到很多毛刺,都是大查询导致。

  因为这个问题,难以保障数据基线 SLA,一段时间里我们不大敢把 StarRocks 大范围推广给业务使用。如果给每个业务搭建专用 StarRocks 集群,成本压力又太大。

  StarRocks 2.2 版本开始支持资源隔离,支持配置资源组并分配资源 Quota,支持用户和资源组的绑定,可以有效将大查询业务场景隔离到专用的资源组,避免影响其他小查询。我们在 2022 年 Q2 上线了资源隔离功能,目前线上已经全部开启资源隔离,正在做OLAP业务推广。

3.1.2 整体效果

   确认资源组能有效隔离大查询、保护小查询。

3.2 稳定优先,监控先行,优化运维

   我们的集群稳定性 SLA 主要包括:集群可用性 SLA 3个9,集群查询性能 95分位 3s,BI 业务慢查询率 1.5%。

  我们部署了社区提供的prometheus+grafana监控FE、 BE的metrics监控方案,同时配置了告警

另外在实践过程中,有时会收到业务反馈的sql慢查询问题,排查其原因,主要可以分为两类:

  • 表结构不合理:数据倾斜、分桶数量不合理,并行度不够。

  • SQL 不合理:索引、物化视图无法命中,分桶、分区裁剪失效。

这些问题会影响查询性能和慢查询率SLA。为了发现和解决这些问题,做到提前感知、提前优化,我们需要监控所有的查询日志,并及时通知用户优化表结构和查询 SQL

解决方案

  StarRocks 查询状态监控。通过解析 audit.log 结合 explain SQL 的信息,统计每个慢 SQL的执行时间、内存使用、返回行数、扫描数据量等情况,对慢查询做到及时预警。主要流程可分为以下三个步骤:

1.解析audit.log

   FE 的 audit.log 提供了查询类型,客户端 IP,查询用户名称,数据库名称,状态,扫描的数据大小,扫描的数据行数,结果数据行数,查询 ID(通过 ID 去 BE 日志找对应的查询资源),查询的 SQL;

2. 获取 Plan fragment

 通过查询该 SQL 的逻辑执行计划(explain + sql);

3. 统计资源消耗

通过 fragment_id 查询当前物理执行计划所消费的资源:

最终实现方案如下图所示:

  filebeat 采集 audit.log 和 be.INFO 日志发送到 Apache Kafka,然后 Flink SQL 聚合 query_id 和 fragment 的数据,并将数据写入到 MySQL。

  整套监控系统已经在集团上线并平稳运行。上线后极大减轻了我们的运维工作,基本可以做到提前预防问题、发现问题、解决问题,有效保障了 SLA。

3.3降低门槛,不折腾用户

  在以往的工作经验中,做平台的和上层用户会存在一些沟通障碍,用户往往不了解平台的架构,技术,能力,使用流程。平台技术做得再好,最终还是要通过服务用户来产生价值。为了能更好地服务用户,我们做了很多降低门槛的工作。

3.3.1 与现有的平台做打通

  • 离线导数,目前已经和离线调度系统打通,固化了一个离线作业类型,通过 Broker load 的方式导数,Hive 表可以一键订阅到 StarRocks。
  •  实时导数,目前用户可以通过 Flink-Connector-StarRocks 的方式,用 Jar 或者 Flink SQL 快速实现导数。
  •  Hive 外表,支持使用 Hive 外表的方式,直接用 StarRocks 查询分析 Hive 数据,省掉导数流程,适合某些临时性质的需求。
  •  数据应用系统,目前已经和 BI分析系统、自助分析系统打通,使用 MySQL JDBC 的方式接入。
  • 业务系统,目前提供 API 和 MySQL JDBC 两种方式给业务系统直接查询。

3.3.2 使用流程产品化

  目前我们实现了一个 web 系统 StarRocks 管控台,用户在页面上自助申请用户、建库、建表、权限等。

3.3.3 主动深入业务

   目前我们 OLAP团队每周都会参加业务的产品周会,关注业务动向和痛点,从 OLAP 角度提供解决思路和咨询服务。同时增加与产品和业务团队的沟通,减少彼此之间的认知屏障。

四、近期规划

  我们最终的目的是为了更好地满足用户的分析查询场景,提高效率,服务业务。在未来使用 StarRocks 过程中,主要的优化方向有以下几点:

  • 1.新增建表的审计功能,合理使用分区分桶字段,加速数据查询
  • 2.通过对用户的行为分析,统计出报表高频的查询场景,使用物化视图进行数据的预聚合,进一步提升查询性能
  • 3.优化多表Join分析查询场景的性能,使用Colocation Join ,通过预先的数据分布,减少节点间网络传输带来的延迟开销,进一步提升查询性能

参考文章:

欢聚集团 × StarRocks: 灵活、统一、极速的数据分析新范式

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

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

相关文章

Arm:初识Keil MDK Vision 6及VScode应用Keil 6(Keil Studio for VS Code安装与使用)

系列文章目录 目录 系列文章目录 前言 一、 Keil MDK Vision 6是什么? 二、Keil MDK Vision 6的组合 2.最值得一看的更新就是VScode插件 三、Keil MDK Vision 6与VScode的组合能碰撞出火花吗?(Keil Studio for VS Code) 前…

HBase安装,配置,启动,检查

目录: 一、HBase安装,配置 1、下载HBase安装包 2、解压,配置环境变量并激活 3、hbase 配置 4、将hadoop和zookeeper的配置文件创建软连接放在hbase配置目录 5、配置 regionserver 二、HBase启动与关闭,安装检验 1、启动关闭hbase的命令 2、 检…

关于手机是否支持h264的问题的解决方案

目录 现象 原理 修改内容 现象 开始以为是手机不支持h264的编码 。机器人chatgpt一通乱扯。 后来检查了下手机,明显是有h264嘛。 终于搞定,不枉凌晨三点起来思考 原理 WebRTC 默认使用的视频编码器是VP8和VP9,WebRTC内置了这两种编码器…

Java 学习和实践笔记(31):封装(encapsulation)

面向对象的三大特点:继承、封装、多态。前面学了继承,现在讲封装。 封装encapsulation一词来自于capsule,胶囊,小密器,密闭的空间。 封装的理念:高内聚,低耦合。 高内聚就是类的内部数据操作…

Python是编译型还是解释型?——跟老吕学Python编程

Python是编译型还是解释型? 编译型语言和解释型语言的概念编译型语言的定义解释型语言的定义 编译型语言和解释型语言的区别主要体现在程序的执行过程:编译型语言解释型语言 Python的编译和执行过程Python的解释器Python的交互式解释器Python与编译型语言…

thingsboard如何自定义udp-transport

0、参考netty实现udp的文章 https://github.com/narkhedesam/Netty-Simple-UDP-TCP-server-client/blob/master/netty-udp/src/com/sam/netty_udp/server/MessageDecoder.java 调试工具使用的是:卓岚TCP&UDP调试工具 1、在common\transport下面创建udp模块,仿照mqtt的创…

千兆网络变压器的特点

不要选错了,同款的小24PIN工业级千兆网络变压器有两种,外壳尺寸、工程参数完全相同。很多客户对这两款产品傻傻分不清,今天我就来详细介绍一下: HX82409S特点有三个: 一,采用单环设计,只有一颗…

部署 LVS(nginx)+keepalived高可用负载均衡集群

目录 一、集群的概述 1、什么是集群 2、普通集群与负载均衡集群 2.1 普通集群(Regular Cluster) 2.2 负载均衡集群(Load Balancing Cluster) 2.3 高可用集群(High Availability Cluster) 2.4 区别 …

SpringMVC03、HelloSpring

3、HelloSpring 3.1、配置版 新建一个Moudle &#xff0c; springmvc-02-hello &#xff0c; 添加web的支持&#xff01; 确定导入了SpringMVC 的依赖&#xff01; 配置web.xml &#xff0c; 注册DispatcherServlet <?xml version"1.0" encoding"UTF-8…

Leetcode3069. 将元素分配到两个数组中 I

Every day a Leetcode 题目来源&#xff1a;3069. 将元素分配到两个数组中 I 解法1&#xff1a;模拟 简单地按题意模拟。 代码&#xff1a; /** lc appleetcode.cn id3069 langcpp** [3069] 将元素分配到两个数组中 I*/// lc codestart class Solution { public:vector<…

详解HashMap、Hashtable和ConcurrentHashMap的区别

前言 本篇博客博主将详细地解释HashMap、Hashtable和ConcurrentHashMap的区别&#xff0c;坐好板凳发车啦~~ 在多线程使用哈希表&#xff0c;HashMap本身就不是线程安全的&#xff1b; 在多线程环境下使用哈希表可以使用&#xff1a;Hashtable和ConcurrentHashMap。 一.Has…

python学习 the fifth day

七、数据容器&#xff1a;dict字典 1.字典的定义 为什么需要字典&#xff1f; 通过key&#xff08;字典&#xff09;&#xff0c;取到对应的value 字典的key和value可以是任意数据类型&#xff08;key不可以是字典&#xff09; 字典的嵌套&#xff1a; #字典的嵌套dictiona…

Langchain-Chatchat本地搭建ChatGLM3模型和提取PDF内容

文章目录 1、软件要求2、安装CUDA2.1、安装gcc2.2、安装CUDA 3、安装Anaconda33.1、下载Anaconda33.2、创建python虚拟环境 4、部署系统4.1、下载源码4.2、安装依赖4.3、下载模型4.4、初始化配置和知识库4.4.1、初始化配置4.4.2、初始化知识库 4.5、运行4.6、运行4.6.1、启动4.…

TimescaleDB 开源时序数据库

文章目录 1.TimescaleDB介绍2.Hypertable 和 chunk3.Hypertable4.Hypertable操作 开源中间件 # TimescaleDBhttps://iothub.org.cn/docs/middleware/ https://iothub.org.cn/docs/middleware/timescale/timescale-summary/1.TimescaleDB介绍 TimescaleDB是基于PostgreSQL数据…

在vue2中使用tailwindcss(完整教程)

如果你看过好多教程之后&#xff0c;还是报错&#xff0c;无法使用tailwindcss&#xff0c;我希望本教程可以让你成功上岸。 环境要求 node&#xff1a;>v14.17.0 安装tailwindcss 由于最新的tailwind css使用post css 8版本&#xff0c;vue2框架暂时还不支持&#xff0…

HTML5 基础1

<b> 和 <strong>的异同 相同点&#xff1a;在显示上&#xff0c;这两个标签都是加粗文本。 不同点&#xff1a;使用网页阅读器阅读网页&#xff08;盲人使用&#xff09;&#xff0c;strong 会重读&#xff0c;b 则不会。从起源上来说&#xff0c;strong 是为了在…

Word转PDF保持图片原有清晰度

目录 1、需要的软件 2、配置Acrobat PDFMaker 3、配置Acrobat Distiller 4、更改Acrobat PDFMaker中的首选项 5、将word转换成pdf 1、需要的软件 利用Adobe Acrobat DC工具。 打开word&#xff0c;选择Acrobat的插件&#xff0c;选择首选项。 如果没有出现Acrobat插件也…

git入门到精通

第3章 Git常用命令 3.1 设置用户签名 3.2 初始化本地库 3.3 查看本地 状态 3.3.1 首次查看&#xff08;工作区没有任何文件&#xff09; 3.3.2 新增文件&#xff08;hello.txt&#xff09; 3.3.3 再次查者&#xff08;检測到末追踪的文件&#xff09; 3.4添加暫存区 3…

Pytorch线性回归实现(Pycharm实现)

步骤都在注释里写清楚了&#xff0c;可以自己调整循环的次数观察输出的w与b和loss的值 import torch#学习率&#xff0c;用来进行w和b的更新 learning_rate 0.01 #1. 准备数据 #这里使用y3x0.8.也就是w3&#xff0c;b0.8.创造一个500行1列的数据 xtorch.rand([500,1]) y_true…

物联网,智慧城市的数字化转型引擎

随着科技的飞速发展&#xff0c;物联网&#xff08;IoT&#xff09;已成为推动智慧城市建设的关键力量。物联网技术通过连接各种设备和系统&#xff0c;实现数据的实时采集、传输和处理&#xff0c;为城市的智能化管理提供了强大的支持。在数字化转型的浪潮中&#xff0c;物联网…