StarRocks存活节点数小于副本数无法新建分区


当前看到的逻辑是StarRocks存活节点数小于副本数无法新建分区,我们可以容忍一个节点的失败的情况下,如果把这里的逻辑修改为,可以容忍有一个存活节点数比副本数少1,仍然支持创建新的分区。

这样的改动会造成什么负面的影响吗?

贴一下代码:

private List chosenBackendIdBySeq(int replicationNum, Multimap<String, String> locReq) throws DdlException {
SystemInfoService systemInfoService = GlobalStateMgr.getCurrentState().getNodeMgr().getClusterInfo();
List chosenBackendIds = systemInfoService.getNodeSelector()
.seqChooseBackendIds(replicationNum, true, true, locReq);
if (!CollectionUtils.isEmpty(chosenBackendIds)) {
return chosenBackendIds;
} else if (replicationNum > 1) {
List backendIds = systemInfoService.getBackendIds(true);
throw new DdlException(
String.format("Table replication num should be less than or equal to the number of available BE nodes. "
+ "You can change this default by setting the replication_num table properties. "
+ “Current alive backend is [%s]. “, Joiner.on(”,”).join(backendIds)));
} else {
throw new DdlException(“No alive nodes”);
}
}

之前我也想过这个问题,副本数必须大于1的情况是,怕这唯一的一个副本如果损坏了,那数据就真的没了。在分布式上有这个顾虑也正常。

举个例子3节点3副本的情况
一个节点挂掉了,这个表新建分区,注意是新建分区,仍然要求节点数可以保障创建3副本,
不能先新建2个副本,等挂掉的节点修复上线后,在补齐副本

这个时候还是有2副本的,不是只有唯一副本

如果是这个 那应该没什么好纠结的,掉线了1个就只有2个了,starrocks默认是3,除非您手动指定replication_num=2

已经存在的表也不能导入了,必须要修改副本数,从使用角度上可用性下降了

像ES可以支持先创建出分区,等节点重新上线之后,再补齐副本

StarRocks如果这样修改的话会不会带来什么别的问题呢