You need to enable JavaScript to run this app.
导航
数据重分布
最近更新时间:2025.03.19 16:44:25首次发布时间:2023.09.06 10:24:16
我的收藏
有用
有用
无用
无用

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

背景信息

数据重分布示意图如下。
Image

适用场景

  • 刚刚进行过水平扩容,但数据未重分布,或存在表部分分区未重分布的场景;
  • 因为直接插入本地表,或因为 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;
    • 若您有相关疑问,请提交工单。

操作步骤

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

  1. 登录并进入ByteHouse企业版控制台后,单击顶部集群管理,在集群列表的操作列,单击对应集群后的显示更多 > 重分布
    Image

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

    参数

    配置说明

    选择重分布方式

    当前支持重分布的方式有:全部重分布、最小重分布、自定义重分布。

    • 全部重分布:重分布表的全部分区,提高现有数据的读性能,但数据量过大会导致表的不可写入时间过长。
    • 最小重分布:仅重分布 HaUniqueMergeTree 表的活跃分区(72小时内有写入数据的分区),大幅缩短数据表不可写入时间。

      说明

      若进行过最小重分布后,仍有数据写入【72小时内有写入数据的分区】之外的分区,则数据无法去重,建议尽早对可能写入数据的历史分区进行重分布。

    • 自定义重分布:按需自定义数据表和相应分区进行重分布,适用于灵活配置重分布的场景。

      说明

      如果对unique表进行自定义分布,建议优先选择活跃分区进行重分布,否则或导致新写入数据去重逻辑失效。

    选择重分布范围

    您可以选择重分布所有表,或手动选择重分布部分表。

    • 不同的重分布方式支持选择的重分布范围不一致:
      Image
      • 全部重分布:默认选择重分布所有表,也支持您手动切换至部分表页签,选择重分布部分表。
      • 最小重分布:仅支持重分布所有 HaUniqueMergeTree 表的活跃分区。
      • 自定义重分布
        • 默认选择重分布所有表,支持设置选择重分布表的重分布范围(全表、活跃分区、指定分区、时间范围),分区支持批量设置。
        • 也支持您手动切换至部分表页签,选择重分布部分表,对设置部分表的重分布范围(全表、活跃分区、指定分区、时间范围),分区支持批量设置。
    • 如果您选择完重分布的表范围后,页面提示您当前有不支持重分布操作的表,您可单击查看详情查看不支持重分布的表列表,及不支持重分布的原因,您可参考原因对表进行修复处理,完成后再重新进行重分布操作。
      Image
  3. 开始重分布。

    • 系统会依据 Sharding_key 将数据重新拆分到所有节点;表会逐一进入只读状态,同时集群的计算和 IO 负载会较高,预估读性能会下降且不稳定。
    • HaUnique表只要进行过重分布,拓扑会自动加入扩容节点,新写入的数据会按照新的拓扑进行分布

后续步骤
  1. 您可以在任务中心 > 运维任务页面中查看当前已提交的重分布任务,查看重分布状态。
    Image
  2. 对于失败的重分布任务可单击重分布详情,在弹出的重分布详情页面中查看失败的重分布表及失败原因,参考参考界面提示进行修改后再重新提交重分布任务。
    Image