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中。

复制代码
 @Override
 protected 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 四点。

相关推荐
不动明王198415 小时前
能力联邦:Presto 的一种可能演进方向
大数据·iceberg·presto·湖仓·lance·联邦查询引擎
Jelena1577958579216 小时前
电商运营分析数据比价接口实战:多平台价格监控与智能决策系统
java·大数据·数据库
AC赳赳老秦18 小时前
企业工商公开信息采集分析:OpenClaw 批量查询企业工商信息,生成企业画像报告
大数据·开发语言·python·自动化·php·deepseek·openclaw
BerryS3N19 小时前
Code Git 工作树:多分支开发的痛点与工作树的曙光
大数据·git·elasticsearch
小K漫剧创作笔记1 天前
AI短剧出海从「选修课」变「必修课」:合规分发正在成为内容全球化的真正门槛
大数据·人工智能·ai·aigc·漫剧
samLi06201 天前
【数据集】中国“千兆城市”关键指标数据(2021-2023年)
大数据
城数派1 天前
1991-2100年中国1km分辨率逐月气候指标栅格数据集(28个气象指标)
大数据
AC赳赳老秦1 天前
司法公开数据采集应用:OpenClaw 抓取裁判文书公开信息,批量整理同类参考案例
java·大数据·python·数据挖掘·数据分析·php·openclaw
yurenshi16681 天前
自媒体多账号管理工具 4 款实测:聚媒通 / 融媒宝 / 新榜小豆芽 / 矩阵通横向对比,快速选型
大数据·矩阵·媒体
nVisual1 天前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理