数据重分布(Resharding)是指将每张 MergeTree 家族表根据分片键(Sharding Key)拆分到每个分片,使得集群每个节点数据更均衡,为查询提供的性能也更均衡。
背景信息
数据重分布示意图如下。

适用场景
- 刚刚进行过水平扩容,但数据未重分布,或存在表部分分区未重分布的场景;
- 因为直接插入本地表,或因为 Kafka 导入时上游 Partition 数量未按最佳实践配置,导致的数据不均匀的场景(不适用于 Sharding Key 设错,导致数据不均衡的场景);
不适用场景
- 表不完整的场景:如果用户没有按照最佳实践建表(如部分表只在部分节点存在),则不会重分布这些数据;
- 特殊的数据类型:含 Bitmap64 类型的表,无法执行重分布;
- 特殊表引擎:MySQL,S3 等外表引擎,View,Merge,Join 等无数据存储的表引擎不支持重分布;
- 物化库表引擎:MaterializedView,MaterializeMySQL 暂时不支持数据重分布,但您可以在扩容后通过重建库/表,重新同步数据。
注意事项
- 每个旧节点需要预留存储的容量为最大的一张表的容量,例如,表的总大小为 100GB,当前10个节点,缩容为5个节点,则需要在每个旧节点预留 100GB/5 = 20GB 以上的存储;
- 数据重分布期间,表会逐一进入只读状态,同时集群的计算和 IO 负载会较高,预估读性能会下降且不稳定;
- 若集群存在HaUnique表,则扩容会自动创建虚拟集群,且将所有HaUnique表挂载到虚拟集群上,以保证集群扩容前后HaUnique表的拓扑维持不变,数据分布和出去逻辑维扩容前状态。
- 特殊情况:HaUniqueMergeTree 表引擎只能在单一分片内实现去重,因此若采用 Kafka 导入,Kafka Partition -> ByteHouse Shard 的映射关系需要保持不变。例如:
- 扩容后:unique_key = 1 -> 原 Kafka partition 1 -> 原 ByteHouse shard 1
- 扩容后:unique_key = 1 -> ByteHouse shard 3,那需要调整 unique_key = 1 -> 新的 Partition,使其能稳定写入 ByteHouse shard 3;
- 若您有相关疑问,请提交工单。
操作步骤
您可以参考下面步骤完成重分布操作,操作过程中需要集群管理员或系统管理员权限。
登录并进入ByteHouse企业版控制台后,单击顶部集群管理,在集群列表的操作列,单击对应集群后的显示更多 > 重分布。

在弹出的侧边栏中选择重分布的表。

参数 | 配置说明 |
---|
选择重分布方式 | 当前支持重分布的方式有:全部重分布、最小重分布、自定义重分布。 - 全部重分布:重分布表的全部分区,提高现有数据的读性能,但数据量过大会导致表的不可写入时间过长。
- 最小重分布:仅重分布 HaUniqueMergeTree 表的活跃分区(72小时内有写入数据的分区),大幅缩短数据表不可写入时间。
说明 若进行过最小重分布后,仍有数据写入【72小时内有写入数据的分区】之外的分区,则数据无法去重,建议尽早对可能写入数据的历史分区进行重分布。 - 自定义重分布:按需自定义数据表和相应分区进行重分布,适用于灵活配置重分布的场景。
说明 如果对unique表进行自定义分布,建议优先选择活跃分区进行重分布,否则或导致新写入数据去重逻辑失效。
|
选择重分布范围 | 您可以选择重分布所有表,或手动选择重分布部分表。 - 不同的重分布方式支持选择的重分布范围不一致:
 - 全部重分布:默认选择重分布所有表,也支持您手动切换至部分表页签,选择重分布部分表。
- 最小重分布:仅支持重分布所有 HaUniqueMergeTree 表的活跃分区。
- 自定义重分布:
- 默认选择重分布所有表,支持设置选择重分布表的重分布范围(全表、活跃分区、指定分区、时间范围),分区支持批量设置。
- 也支持您手动切换至部分表页签,选择重分布部分表,对设置部分表的重分布范围(全表、活跃分区、指定分区、时间范围),分区支持批量设置。
- 如果您选择完重分布的表范围后,页面提示您当前有不支持重分布操作的表,您可单击查看详情查看不支持重分布的表列表,及不支持重分布的原因,您可参考原因对表进行修复处理,完成后再重新进行重分布操作。

|
开始重分布。
- 系统会依据 Sharding_key 将数据重新拆分到所有节点;表会逐一进入只读状态,同时集群的计算和 IO 负载会较高,预估读性能会下降且不稳定。
- HaUnique表只要进行过重分布,拓扑会自动加入扩容节点,新写入的数据会按照新的拓扑进行分布
后续步骤
- 您可以在任务中心 > 运维任务页面中查看当前已提交的重分布任务,查看重分布状态。

- 对于失败的重分布任务可单击重分布详情,在弹出的重分布详情页面中查看失败的重分布表及失败原因,参考参考界面提示进行修改后再重新提交重分布任务。
