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

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动