为了实现集群高可用,建议集群最低3个节点,FE和BE分开部署也可以混合部署。
单节点配置要求:
- BE推荐16核64GB内存以上,FE推荐8核16GB内存以上。
- 磁盘可以使用HDD或者SSD。
- CPU必须支持AVX2指令集,
cat /proc/cpuinfo |grep avx2
确认有输出即可,如果没有支持,建议更换机器,StarRocks的向量化技术需要CPU指令集支持才能发挥更好的效果。 - 网络需要万兆网卡和万兆交换机。
环境支持要求:
-
Linux (Centos 7+)
-
Java 1.8+
假定内存、磁盘都不会拖后腿的情况下,分析/查询的性能瓶颈在 CPU 的处理能力。所以通过对 CPU 的算力要求,来预估集群的数量。
集群需要的总 CPU 资源:e_core = scan_rows / cal_rows / e_rt * e_qps
变量名 | 变量含义 | 样例 |
---|---|---|
e_core | 预计要使用的CPU核数(vCPU) | |
vCPU总数(逻辑处理器) = Socket数(CPU个数)x Core数(内核)x Thread数(超线程) | 540c | |
scan_rows | 线上典型场景中的数据扫描量 | 3000万 |
e_qps | 预期线上QPS | 180qps |
e_rt | 预期线上响应时间 | 300ms |
cal_rows | StarRocks针对SQL场景的计算能力 | 3000万/s |
场景样例:
-
数据量:事实表一年 3.6亿行数据,大约 100万行/天;
-
典型查询场景:一个月的事实表数据( 3000万 )和比较小的的维度表(万级别)做关联,再进行 group by、sum 等聚合计算;
-
期望:响应时间在 300ms 以内,业务的峰值 QPS 达 180 左右。
估算解释:
-
StarRocks 的处理能力在“单核 1000万~1亿/秒”,此场景有「多表 join」和「group by」以及一些表达式函数,相对复杂,所以按照「 3000万/s 的计算能力」估算,需要 3 个 vCPU:3000万 / 3000万/s / 300ms = 3c。
-
并发峰值为180qps,因此需要 3 * 180 = 540c,即总共需要 540 个 vCPU。按单台物理机48虚拟核(vCPU)算,理论计算大约需要12台物理机。
-
实际 POC 过程中,用3台物理机16虚拟核进行压力测试,能够在40qps下满足300-500ms的响应时间。最终,线上确定用7台48虚拟核的物理机。 所以,还是建议用户要根据实际的业务场景做一下POC测试。
综上:根据POC的测试结果,建议用户搭建3个FE节点每个节点16核64GB内存、7个BE节点每个节点48核152GB内存。
其他说明:
-
计算业务越复杂、处理中的一行的列数量越多越复杂,每秒能处理的行数就会越少;
-
计算中「条件过滤」的效果越好(能过滤掉很多数据),则能处理的行数就会越多(因为内部有一些索引结构,能更快地帮助处理数据);
-
不同「表模型」会对处理能力有很大影响,上面是按照「明细模型」估算。其他模型,内部会有一些特殊处理,真实的数据量行数会和用户理解的数据量行数有一些差异;同时,分区/分桶,也会对查询性能有很大影响;(我们有其他相关文档来指导用户如何使用以达到最佳性能)
-
对于一些需要扫描大量数据的场景,磁盘的性能也会影响处理能力。需要时,可以使用SSD来加速。