Compaction Service
Compaction Service 是 EMR Serverless StarRocks 3.5 版本引入的新功能(目前处于 Beta 阶段),将 Compaction 任务从业务所在计算组中独立出来,运行在专用的 Compaction Service 上,实现工作负载隔离、弹性伸缩和性能优化。本文介绍 Compaction Service 的功能及使用方法。
功能概述
核心价值
能力 | 说明 |
Workload 隔离 | Compaction 在独立的 Service 上执行,避免与查询、导入等业务任务争抢资源,保障业务稳定性。 |
弹性伸缩 | Compaction Service 支持设置 Min CU / Max CU,根据 Compaction 负载自动弹缩,在保障 Compaction 及时性的同时降低成本。 |
开箱即用 | 3.5 版本自动创建 Compaction Service,用户只需在控制台一键开启,无需额外选购或配置。 |
性能优化
Compaction Service 在隔离的基础上进行了以下性能优化:
Peer Cache 读取:Compaction 任务执行时,直接从业务所属计算组中有缓存的节点拉取数据(Peer Cache),避免访问对象存储(Remote I/O),显著提升 Compaction 读取性能。
Cache 推送:Compaction 完成后,Compaction Service 将合并后的数据文件异步推送到业务所属计算组的节点上,避免因缓存失效(Cache Miss)导致的对象存储访问,保障查询性能不受影响。
前提条件
EMR Serverless StarRocks 版本 >= 3.5。
存算分离模式集群。
开启 Compaction Service
在 EMR Serverless StarRocks 控制台上,执行以下步骤开启 Compaction Service:
进入EMR Serverless StarRocks实例列表页面。
在左侧导航栏,选择。
在顶部菜单栏处,根据实际情况选择地域。
单击目标实例ID。
单击 Compaction Service 页签,在基本信息页面,单击启动服务。
在右侧弹出的页面设置,最小 CU和最大 CU。
配置完成后,单击启动服务。
关闭 Compaction Service
在控制台中单击关闭服务后,右侧弹出的页面中请勾选风险确认选项,然后单击确认关闭服务即可。关闭后,Compaction 将回退到在业务所属计算组上执行,已在执行的任务会正常完成。
弹性伸缩
CU 配置
Compaction Service 支持设置弹性伸缩范围:
参数 | 说明 | 建议 |
最小 CU | 最小计算单元数,空闲时缩容至此值。 | 建议设置为满足基础 Compaction 需求的最小值。 |
最大 CU | 最大计算单元数,高峰时扩容至此值。 | 根据业务写入峰值和 Compaction Score 情况设置。 |
弹缩策略
Compaction Service 根据以下指标自动弹缩:
Compaction Score:反映数据版本堆积程度,Score 越高说明 Compaction 压力越大。
任务负载:当前 Compaction 任务数量与可用资源的比例。
当 Compaction Score 持续升高或任务排队时,系统自动扩容;当负载降低后,系统逐步缩容至 Min CU。
最佳实践
推荐在以下场景中使用 Compaction Service:
高写入吞吐场景:持续高频写入导致 Compaction Score 上升,影响查询性能。
查询敏感场景:业务对查询延迟敏感,不希望 Compaction 抢占查询资源。
成本优化场景:希望通过弹性伸缩按需使用 Compaction 资源,降低常驻成本。
注意事项
Compaction Service 仅适用于存算分离(Shared-Data)模式的集群。
开启 Compaction Service 后,所有表的 Compaction 任务将统一调度到 Compaction Service 执行。
Compaction Service 的 CU 资源独立按使用量计费,请合理配置 Min/Max CU。
关闭 Compaction Service 后,Compaction 将自动回退到各业务所属计算组上执行,已在执行的任务会正常完成。
建议在业务低峰期首次开启 Compaction Service,以便观察对系统的影响。