You need to enable JavaScript to run this app.
导航

数据重分布

最近更新时间2023.09.06 10:24:16

首次发布时间2023.09.06 10:24:16

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

适用场景

  • 刚刚进行过水平扩容,但数据未重分布,或部分表重分布失败的场景;
  • 因为直接插入本地表,或因为 Kafka 导入时上游 Partition 数量未按最佳实践配置,导致的数据不均匀的场景(不适用于 Sharding Key 设错,导致数据不均衡的场景);

不适用场景

  • 表不完整的场景:如果用户没有按照最佳实践建表(如部分表只在部分节点存在),则不会重分布这些数据;
  • 特殊的数据类型:含 Bitmap64 类型的表,无法执行重分布;
  • 特殊表引擎:MySQL,S3 等外表引擎,View,Merge,Join 等无数据存储的表引擎不支持重分布;
  • 物化库表引擎:MaterializedView,MaterializeMySQL 暂时不支持数据重分布,但您可以在扩容后通过重建库/表,重新同步数据。

注意事项

  • 每个旧节点需要预留存储的容量为最大的一张表的容量,例如,表的总大小为 100GB,当前10个节点,缩容为5个节点,则需要在每个旧节点预留 100GB/5 = 20GB 以上的存储;
  • 数据重分布期间,表会逐一进入只读状态,同时集群的计算和 IO 负载会较高,预估读性能会下降且不稳定;
  • 特殊情况: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;
    • 若您有相关疑问,请提交工单。

操作步骤

您可以参考下面步骤完成重分布操作,操作过程中需要集群管理员或系统管理员权限。

  1. 运维与权限管理 > 集群管理 > 集群列表 > 重分布;

图片

  1. 选择重分布的表;

图片

  1. 开始重分布。系统会依据 Sharding_key 将数据重新拆分到所有节点;表会逐一进入只读状态,同时集群的计算和 IO 负载会较高,预估读性能会下降且不稳定;