StarRocks 存算分离成本优化最佳实践

2024-08-28 15:36

本文主要是介绍StarRocks 存算分离成本优化最佳实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

序言

StarRocks 存算分离借助对象存储来实现计算和存储能力分离,而存算分离版本 StarRocks 一般来说有以下三方面成本:

  1. 计算成本,也即机器使用成本,尤其是运行在公有云上时

  2. 存储成本,该部分与对象存储上存储的数据量相关

  3. API 访问成本,这部分与访问对象存储各种 API 的频率相关


优化数据导入模式

在存算分离中,我们推荐积攒更大批量的数据,使用低频大批量写入来代替高频微批写入,从而可以达到降低对象存储如 S3 的写入次数目的。同时,降低写入频次还可以降低后台数据版本 Compaction 的频率,进一步降低对象存储的写入次数,从而降低成本。

除此之外,对于某些导入模型,例如 Routine Load,我们还可以降低 Job 的并发 Task 数量来降低对象存储的写入频率,我们可以观察 BE 日志中每个 Task 的单次 KafKa 消费数据量,如果发现量较小,那我们就可以降低 并发 Task 数量来降低对象存储写入次数。

例如,下面的例子就展示了一个真实用户案例,该用户存在大量 Routine Load Job,优化之前每个 Job 的并发度为 3,导致每小时可产生约 15-20w 次 S3 PUT Object 调用请求。我们分析了它的 Job,发现每个 Task 单次只能从 Kafka 消费 数百行数据,于是我们果断调整了任务的并发数,从 3 降低为 1,通过监控我们也发现,每个 BE 节点上的 IOPS 有了明显的下降,如下图所示(约从 15:00 完成调整):

3d29e7f51415e7feab5a2603be5fa1c3.jpeg


优化分桶数

简单解释下分桶数过多对于成本的负面影响:

  1. 导入时,会将数据根据分桶键 Hash 写入所有 Tablet,每个 Tablet 都会产生 S3 的 PUT Object 调用。因此,分桶数越多,PUT Object 调用也就越多

  2. Compaction 也会产生写入,原理同上

  3. 查询时,如果使用独立的 Warehouse 服务查询,首次查询时都会访问 S3,而 Tablet 越多,产生的 S3 GET Object 请求也就相应地增加。

因此,我们也需要根据业务模式和成本来合理选择创建表时的分桶数,我们一般建议:

  1. 如果可以,尽量创建分区表

  2. 根据数据量来决定分桶数,原则上我们一般建议每 1-3GB 数据量对应一个 Tablet,当然,需要还要从业务性能层面再来测试下这种策略的分桶数是否满足性能需求


读取成本优化

云上对象存储一般也会对 GET Object 调用收费(读取带宽与读取次数),因此,我们也需要特别关注该方面的成本消耗,针对这方面,我们有以下建议:

  1. 开启 Cache,并根据业务访问模式尽量设置合适的 Cache 策略(如选择合适大小的 disk 以及 partition_duration 等参数)

  2. 在新版本(3.1.7 or 3.2.2 之后)中,开启 Block Cache,能带来更高的效率和更低的成本


存储成本优化

由于 StarRocks 使用了多版本存储机制,用户通过 show data 命令看到的表的大小与表实际在对象存储可能会有所差距,因此,我们建议用户应当特别关注在对象存储上实际占据的存储容量。

目前可能有以下几点原因会造成对象存储实际消耗超过用户 show data 看到的大小:

  1. 导入或者 Compaction 任务失败时产生了垃圾数据未清理(在后续版本包含垃圾数据自动清理能力),如果遇到该情况,可以使用社区提供的垃圾数据清理工具扫描并清理(慎重使用,避免误删数据)

  2. Compaction 或者 Vacuum 不及时造成了历史版本回收不及时,此时应该重点关注并优先解决 Compaction 跟不上的问题

无论如何,我们都建议用户在日常的巡检中特别关注对象存储实际的数据使用。

这篇关于StarRocks 存算分离成本优化最佳实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115169

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

springboot security之前后端分离配置方式

《springbootsecurity之前后端分离配置方式》:本文主要介绍springbootsecurity之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录前言自定义配置认证失败自定义处理登录相关接口匿名访问前置文章总结前言spring boot secu

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

MySQL中慢SQL优化方法的完整指南

《MySQL中慢SQL优化方法的完整指南》当数据库响应时间超过500ms时,系统将面临三大灾难链式反应,所以本文将为大家介绍一下MySQL中慢SQL优化的常用方法,有需要的小伙伴可以了解下... 目录一、慢SQL的致命影响二、精准定位问题SQL1. 启用慢查询日志2. 诊断黄金三件套三、六大核心优化方案方案

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、