Starrocks 数据均衡DiskAndTabletLoadReBalancer的实现
背景
最近在研究了一下 Starrocks的tablet的Rebalance的能力,这里进行记录一下
本文基于 StarRocks 3.3.5
结论
数据的rebalance 主要以两种模式来进行:
- 按照磁盘的使用率进行移动,如果每个BE的磁盘使用率不足
tablet_sched_balance_load_disk_safe_threshold(默认是50%),
或者 BE间磁盘的最大使用率和最小使用率相差不超过tablet_sched_balance_load_score_threshold(默认10%),就认为不需要进行数据均衡 - 以tablet的副本数量进行移动,不断把副本从副本数多的BE节点 转移到 副本数少的节点上
- 以BE内的磁盘使用率为基准,按照高磁盘使用率往低磁盘使用率的原则进行数据迁移
- 以BE内的各个路径的tablets副本数据为基准 ,按照路径中副本数高的往副本数低的原则进行数据秦阿姨
其中里面设计到的移动都是以 tablet Replica(副本)为单位进行移动的,
且统计信息的来源是来自SystemInfoService,对于每个磁盘类型(HDD,SSD)都会做Rebalance操作
分析
统计信息的来源
ClusterLoadStatistic的统计信息,这个是来自于SystemInfoService,而最终的信息是来源于 BE和 FE进行交互的FrontendServiceImpl,BE会上报给FE信息,这些信息
在FE则会调用 ReportHandler的 exec方法,从而更新到 SystemInfoService中。
@Overrideprotected void exec() {if (tasks != null) {ReportHandler.taskReport(beId, tasks);}if (disks != null) {ReportHandler.diskReport(beId, disks);}if (tablets != null) {ReportHandler.tabletReport(beId, tablets, reportVersion);}if (activeWorkGroups != null) {ReportHandler.workgroupReport(beId, activeWorkGroups);}if (resourceUsage != null) {ReportHandler.resourceUsageReport(beId, resourceUsage);}if (dataCacheMetrics != null) {ReportHandler.datacacheMetricsReport(beId, dataCacheMetrics);}}
tablet调度数据流
其中最主要的数据流如下:
TabletScheduler.runAfterCatalogReady||\/
TabletScheduler.schedulePendingTablets //一次性调度队列中剩余的所有的Rebalance任务||\/
TabletScheduler.handleRunningTablets // 取消超时的Rebalance任务,这个超时时间是根据 TabletSchedCtx.getApproximateTimeoutMs 方法获取的||\/
TabletScheduler.selectTabletsForBalance||\/
Rebalancer.selectAlternativeTablets => selectAlternativeTabletsForCluster ||\/balanceClusterDisk ||\/balanceClusterTablet||\/balanceBackendDisk||\/balanceBackendTablet||\/
handleForceCleanSchedQ // 如果有用户调用了`CLEAN TABLET SCHEDULER QUEUE`命令,则会强制清除包括正在运行的所有的数据Rebalance任务||\/
stat.counterTabletScheduleRound.incrementAndGet() // 记录tablet schedule调度的次数
其中 balanceClusterDisk balanceClusterTablet balanceBackendDisk balanceBackendTablet 分别对应上述的1 2 3 4 四点。
相关文章:
Starrocks 数据均衡DiskAndTabletLoadReBalancer的实现
背景 最近在研究了一下 Starrocks的tablet的Rebalance的能力,这里进行记录一下 本文基于 StarRocks 3.3.5 结论 数据的rebalance 主要以两种模式来进行: 按照磁盘的使用率进行移动,如果每个BE的磁盘使用率不足tablet_sched_balance_load_…...
Redis 接收连接
阅读本文前,建议先看:Redis 事件循环(Event Loop)。 Redis 6 支持接收 3 种连接,对应的接收处理器如下: TCP:acceptTcpHandler;TLS:acceptTLSHandler;Unix …...
AGI大模型(12):向量检索之关键字搜索
1 检索的方式有那些 列举两种: 关键字搜索:通过用户输入的关键字来查找文本数据。语义搜索:不仅考虑关键词的匹配,还考虑词汇之间的语义关系,以提供更准确的搜索结果。2 关键字搜索 先看一个最基础的实现 安装模块 pip install redis 不会redis的去看我的redis专题 首…...
【计算机视觉】CV实战项目- Face-and-Emotion-Recognition 人脸情绪识别
Face-and-Emotion-Recognition 项目详细介绍 项目概述项目功能项目目录结构项目运行方式1. 环境准备2. 数据准备3. 模型训练4. 模型运行 常见问题及解决方法1. **安装依赖问题**2. **数据集问题**3. **模型训练问题**4. **模型运行问题** 项目实战建议项目参考文献 项目概述 F…...
基于国产 FPGA+ 龙芯2K1000处理器+翼辉国产操作系统继电保护装置测试装备解决方案
0 引言 近年来,我国自主可控芯片在国家政策和政 府的支持下发展迅速,并在电力、军工、机械、 通信、电子、医疗等领域掀起了国产化替代之 风,但在芯片自主可控和国产化替代方面还有明 显的不足之处。 2022年我国集成电路进口量多 达 5 3…...
如何批量为多个 Word 文档添加水印保护
在日常办公中,Word文档添加水印是一项重要的操作,特别是在需要保护文件内容的安全性和版权时。虽然Office自带了添加水印的功能,但当需要一次性给多个Word文档添加水印时,手动操作显得非常繁琐且低效。为了提高效率,可…...
Qt QThread 两种线程管理方法
在 Qt 中,QThread 有两种常见的用法,分别对应不同的线程管理模型。这两种方法各有优缺点,适用于不同的场景: 1. 子类化 QThread(继承 QThread,重写 run() 方法) 这是传统的线程用法,类似于 Java 或 C++ 标准库中的线程模型。通过继承 QThread 并重写 run() 方法,将需…...
长期行为序列建模技术演进:从SIM到TWIN-v2
背景 在推荐系统与广告投放领域,长期行为序列建模旨在从用户数月甚至数年的历史行为中捕捉稳定兴趣模式,是解决冷启动、提升推荐精度的关键。随着工业界需求激增,SIM、ETA、SDIM、TWIN及TWIN-v2等模型相继诞生,推动技术不断革新。…...
Linux下 REEF3D及DIVEMesh 源码编译安装及使用
目录 软件介绍 基本依赖 一、源码下载 1、REEF3D 2、DIVEMesh 二、解压缩 三、编译安装 1、REEF3D 2、DIVEMesh 四、算例测试 软件介绍 REEF3D是一款开源流体动力学框架,提供计算流体力学及波浪模型。软件采用高效并行化设计,可以在大规模处理器…...
极狐GitLab Git LFS 速率限制如何设置?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 Git LFS 速率限制 (BASIC SELF) Git LFS (Large File Storage) 是一个用于处理大文件的Git扩展。如果您在仓库中使用 Git LF…...
缓存,内存,本地缓存等辨析
快速辨析缓存,内存,本地缓存,memcache,redis等 (个人临时记录) 缓存 泛指所有用于暂存数据以提升访问速度的技术,包括本地缓存、分布式缓存、CPU缓存等。核心目标是减少对慢速存储(…...
【k8s】PV,PVC的回收策略——return、recycle、delete
PV 和 PVC 的回收策略主要用于管理存储资源的生命周期,特别是当 PVC 被删除时,PV 的处理方式。回收策略决定了 PV 在 PVC 被删除后的行为。 回收策略的类型 Kubernetes 提供了三种主要的回收策略,用于管理 PV 的生命周期: Reta…...
YOLO算法的革命性升级:深度解析Repulsion损失函数在目标检测中的创新应用
## 一、目标检测的痛点与YOLO的局限性 在自动驾驶、智能监控等复杂场景中,目标检测算法常面临致命挑战——遮挡问题。当多个物体相互遮挡时,传统检测器容易出现漏检、误检现象,YOLO系列算法尽管在速度与精度上表现优异,但在处理密集遮挡目标时仍存在明显短板。 ### 1.1 遮…...
嵌入式软件测试的革新:如何用深度集成工具破解效率与安全的双重困局?
在汽车电子、工业控制、航空航天等嵌入式开发领域,团队常面临一个看似无解的悖论:如何在保证代码安全性的前提下,大幅提升测试效率? 传统测试工具往往需要搭建独立环境、插入大量桩代码,甚至需要开发者手动编写测试用例…...
Android studio—socketIO库return与emit的使用
文章目录 一、Socket.IO库简单使用说明1. 后端 Flask Flask-SocketIO2. Android 客户端集成 Socket.IO3. 布局文件注意事项 二、接受服务器消息的二种方法1. 客户端接收通过 emit 发送的消息功能使用场景后端代码(Flask-SocketIO)客户端代码(…...
【Python进阶】VSCode Python开发完全指南:从环境配置到高效调试
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1:配置虚拟环境案例2:智能代码补全案例3:调试配置 运行结果…...
验证Kubernetes的服务发现机制
验证Kubernetes的服务发现机制 文章目录 验证Kubernetes的服务发现机制[toc]一、验证基于环境变量的服务发现机制 服务发现是让客户端能够以固定的方式获取到后端Pod访问地址的机制。下面验证环境变量和DNS这两种机制。 一、验证基于环境变量的服务发现机制 对于需要访问服务…...
《计算机视觉度量:从特征描述到深度学习》—深度学习图像特征工程
传统算法的图像特征分析和描述,一直贯穿图像算法的发展。2017年深度学习的出现,很多开发人员和技术人员认为,图像特征分析这个概念可以被深度学习完全取代。很长一段时间以深度学习为主的视觉方案成为主流,逐渐淡化了传统视觉的特…...
Ubuntu24.04安装ROS2问题
1,根据官方指导安装,安装到步骤: sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg 时遇到问题。导致sudo apt update一直报错: 找了几天的资料…...
【图问答】DeepSeek-VL 论文阅读笔记
《DeepSeek-VL: Towards Real-World Vision-Language Understanding》 1. 摘要/引言 基于图片问答(Visual Question Answering,VQA)的任务 2. 模型结构 和 三段式训练 1)使用 SigLIP 和 SAM 作为混合的vision encoder…...
【专题刷题】滑动窗口(二):水果成篮,所有字母异位词,乘积小于 K 的子数组
📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;ÿ…...
中间件--ClickHouse-12--案例-1-日志分析和监控
1、案例背景 一家互联网公司需要实时分析其服务器日志、应用日志和用户行为日志,以快速发现潜在问题并优化系统性能。 2、需求分析 目标:实时分析日志数据,快速发现问题并优化系统性能。数据来源: 服务器日志:如 Ng…...
Java—— 常见API介绍 第三期
BigInteger 说明: BigInteger表示一个大整数 构造方法: 方法名说明public BigInteger(int num, Random r)获取随机大整数,范围:[0 ~ 2^num -1]public BigInteger(String val)获取指定的大整数public BigInteger(String val, int radix)获取指…...
Qt 信号与槽复习
Qt 信号与槽复习 Qt 信号与槽(Signals and Slots)机制是 Qt 框架的核心特性之一,用于实现对象之间的通信。它提供了一种松耦合的方式,使得组件可以独立开发和复用,广泛应用于 GUI 编程、事件处理和跨模块交互。本文将…...
深入理解React中的Props与State:核心区别与最佳实践
在React开发中,props和state是构建交互式UI的两大基石。许多React初学者常常混淆这两者的概念,导致组件设计出现反模式。本文将全面剖析props与state的本质区别,通过实际场景说明它们的适用边界,并分享高效管理组件数据的实践经验…...
STM32单片机入门学习——第46节: [14-1] WDG看门狗
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.23 STM32开发板学习——第46节: [14-1] WDG看门狗 前言开发板说明引用解答和科普一、…...
什么是分库分表?
分库分表是一种数据库的分布式架构设计策略,以下是详细介绍: 概念 • 随着互联网的发展,数据量呈爆炸式增长,单个数据库服务器可能难以应对海量数据的存储和访问压力。分库分表就是将原本庞大的数据库拆分成多个小的数据库&#…...
n8n 中文系列教程_05.如何在本机部署/安装 n8n(详细图文教程)
n8n 是一款强大的开源工作流自动化工具,可帮助你连接各类应用与服务,实现自动化任务。如果你想快速体验 n8n 的功能,本机部署是最简单的方式。本教程将手把手指导你在 Windows 或 MacOS 上通过 Docker 轻松安装和运行 n8n,无需服务…...
2025第十六届蓝桥杯python B组满分题解(详细)
目录 前言 A: 攻击次数 解题思路: 代码: B: 最长字符串 解题思路: 代码: C: LQ图形 解题思路: 代码: D: 最多次数 解题思路: 代码: E: A * B Problem 解题思路&…...
工厂方法模式详解及在自动驾驶场景代码示例(c++代码实现)
模式定义 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,通过定义抽象工厂接口将对象创建过程延迟到子类实现,实现对象创建与使用的解耦。该模式特别适合需要动态扩展产品类型的场景。 自动驾驶感知场景分析 自动驾…...
