针对30个节点(每个节点配备2块7TB NVMe盘 + 12块8TB SATA盘)的Doris集群,以下是分区与分桶的最佳实践方案:
一、硬件资源规划与存储优化
- 存储介质分层
• NVMe盘:用于存储 热数据分区(如最近3天数据)、元数据 和 高频查询表,利用其高IOPS特性提升实时查询性能。
• SATA盘:存储 冷数据分区(如历史数据)、大宽表 和 批量导入的中间数据,通过成本优势支撑海量存储。 - 磁盘负载均衡
• 每个节点的14块硬盘(2 NVMe + 12 SATA)建议划分为两类存储组:
◦ NVMe组:独立管理,承载热数据分区的2副本;
◦ SATA组:承载冷数据分区的1副本及热数据的第3副本,避免单盘过载。
• 通过SHOW REPLICA DISTRIBUTION
监控分片分布,确保每块硬盘承载的分片数差异≤5%。 - 配置存储组
storage_root_path=/home/disk1/doris,medium:hdd;/home/disk2/doris,medium:ssd
# 说明
# /home/disk1/doris,medium:hdd,表示存储介质是HHD;
#/home/disk2/doris,medium:ssd,表示存储介质是SSD;
二、分区策略设计
1. 分区类型与粒度
• 时间序列数据:采用 Range动态分区,按天/周分区(如p20250313
),单分区原始数据量控制在 50-80TB(压缩后约5-8TB),动态保留最近30天分区。
ALTER TABLE logs SET (
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.end" = "30",
"storage_medium" = "NVMe" -- 热数据分区存储介质
"dynamic_partition.storage_medium" = "hdd", -- 最终存储介质
"dynamic_partition.hot_partition_num" = "2" -- 最近2天分区保留在SSD
);
• 离散值数据:采用 List分区(如按业务线business
字段枚举),每个分区数据量≤20TB,通过ALTER TABLE ... DROP PARTITION
快速清理无效数据。
2. 冷热数据迁移
• 热数据分区(NVMe)满3天后自动迁移至SATA盘:
ALTER TABLE logs MODIFY PARTITION p20250310 SET ("storage_medium"="SATA");
• 对历史分区启用 TTL策略,自动清理90天前数据。
三、分桶策略设计
1. 分桶键选择
• 高基数列优先:如用户ID、设备ID等,哈希分布均匀性≥95%(通过SELECT COUNT(DISTINCT bucket_id)
验证)。
• 复合分桶键:对存在局部热点的场景(如地域+时间),组合2-3列降低倾斜概率。
2. 分桶数量计算
• 总分桶数:根据集群总磁盘数(30节点 ×14盘=420盘),建议总分桶数 400-420,每盘承载约1个分桶。
• 单分桶大小:目标压缩后 5-8GB,计算公式:
分桶数
=
单分区压缩后大小(TB)
×
1024
目标单桶大小(GB)
×
1.2
\text{分桶数} = \frac{\text{单分区压缩后大小(TB)} \times 1024}{\text{目标单桶大小(GB)}} \times 1.2
分桶数=目标单桶大小(GB)单分区压缩后大小(TB)×1024×1.2
示例:50TB分区压缩后5TB
分桶数
=
5
×
1024
/
5
×
1.2
≈
1228
分桶数=5 \times 1024 / 5 \times 1.2 ≈ 1228
分桶数=5×1024/5×1.2≈1228
取整为 1280桶。
3. 分桶与硬件匹配
• 热数据分桶:分配到NVMe盘组,每个BE节点(NVMe盘)承载 40-50个分桶,支撑高并发点查。
• 冷数据分桶:分配到SATA盘组,每个BE节点(SATA盘)承载 80-100个分桶,优化批量扫描吞吐。
四、高级优化技巧
-
Colocate Join优化
对关联表(如订单表与用户表)采用 相同分桶键+分桶数,减少Shuffle开销,提升JOIN性能30%+。 -
资源隔离策略
• 标签化资源组:将NVMe盘绑定到Online
标签处理实时查询,SATA盘绑定到Offline
标签处理ETL任务。
• 动态资源分配:白天高峰期限制ETL任务仅使用SATA资源组,夜间全量开放NVMe资源。 -
分片合并与分裂
• 定期执行ALTER TABLE ... COMPACT
合并小分片(<1GB),控制总分片数≤30万(30节点 ×1万/节点)。
• 对数据增长超预期的分区动态增加分桶数:ALTER TABLE logs ADD PARTITION p20250401 BUCKETS 1600;
五、灾难恢复与扩展性
-
副本策略
热数据3副本(2 NVMe +1 SATA),冷数据2副本(全SATA),平衡可靠性与成本。 -
扩容预设计
预留20%分桶冗余,未来扩容时:
• 增加NVMe节点:直接加入Online
资源组提升实时能力;
• 增加SATA节点:通过ALTER SYSTEM ADD BACKEND
扩展冷存储池。
验证与监控
-
数据分布检查
SHOW REPLICA DISTRIBUTION FROM logs; -- 分片均匀性 EXPLAIN SELECT ... WHERE date='2025-03-13'; -- 分区裁剪效果
-
性能压测
对比NVMe与SATA分区的查询延迟,确保热数据TP99≤100ms,冷数据TP99≤2s。
通过上述策略,可在30节点混合存储集群中实现 热数据高并发响应、冷数据低成本存储 与 全局负载均衡。实际配置需结合业务查询模式进一步调优,建议通过灰度发布验证后再全量上线。