当前位置: 首页 > news >正文

Starrocks 数据均衡DiskAndTabletLoadReBalancer的实现

背景

最近在研究了一下 Starrocks的tablet的Rebalance的能力,这里进行记录一下
本文基于 StarRocks 3.3.5

结论

数据的rebalance 主要以两种模式来进行:

  1. 按照磁盘的使用率进行移动,如果每个BE的磁盘使用率不足tablet_sched_balance_load_disk_safe_threshold(默认是50%),
    或者 BE间磁盘的最大使用率和最小使用率相差不超过tablet_sched_balance_load_score_threshold(默认10%),就认为不需要进行数据均衡
  2. 以tablet的副本数量进行移动,不断把副本从副本数多的BE节点 转移到 副本数少的节点上
  3. 以BE内的磁盘使用率为基准,按照高磁盘使用率往低磁盘使用率的原则进行数据迁移
  4. 以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 四点。

相关文章:

  • DBeaver连接hive
  • DasViewer是什么?如何安装?
  • AI 组件库是什么?如何影响UI的开发?
  • 华为OD机试真题——最长的顺子(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • PyTorch 浮点数精度全景:从 float16/bfloat16 到 float64 及混合精度实战
  • PyTorch分布式训练调试方法(跟踪调用过程)
  • java 排序算法-快速排序
  • # 使用 PyTorch 构建并训练一个简单的 CNN 模型进行图像分类
  • Oracle日志系统之附加日志
  • uni-app 安卓10以上上传原图解决方案
  • 2025妈妈杯数学建模D题完整分析论文(共42页)(含模型建立、代码)
  • uniapp运行在app端如何使用缓存
  • GPU 在机器学习中的应用优势:从技术特性到云端赋能
  • 神经网络优化 - 小批量梯度下降之批量大小的选择
  • CCF CSP 第36次(2024.12)(2_梦境巡查_C++)
  • 初创企业机器学习训练:云服务器配置对效率、成本与可扩展性的影响
  • Python项目--基于机器学习的股票预测分析系统
  • 鸿蒙语言基础
  • c#开发大冲锋游戏登录器
  • OpenCV 中的分水岭算法的原理及其应用---图像分割的利器
  • 俄罗斯准备在没有先决条件的情况下与乌克兰进行谈判
  • 一年吸引30多万人次打卡,江苏这个渔村是怎么做到的?
  • 东北财大“一把手”调整:方红星任校党委书记,汪旭晖任校长
  • 最新研究挑战男性主导说:雌性倭黑猩猩联盟对付雄性攻击,获得主导地位
  • 韩国对华中厚板征收临时反倾销税
  • 美检察官向法庭提交通知,要求判处枪杀联合健康高管嫌疑人死刑