Partitioned Raft KV

v6.6.0 之前,基于 Raft 的存储引擎,TiKV 使用单个 RocksDB 实例存储该 TiKV 实例所有 Region 的数据。

为了更平稳地支持更大的集群,从 v6.6.0 开始,TiDB 引入了一个全新的 TiKV 存储引擎,该引擎使用多个 RocksDB 实例来存储 TiKV 的 Region 数据,每个 Region 的数据都独立存储在单个 RocksDB 实例中。

新的 TiKV 引擎能够更好地控制 RocksDB 实例的文件数和层级,并实现了 Region 间数据操作的物理隔离,避免相互影响。同时,该引擎支持平稳管理更多的数据。你可以理解为,TiKV 通过分区管理多个 RocksDB 实例,这也是该特性 Partitioned Raft KV 名字的由来。

使用场景

如果你的 TiKV 集群有以下特点,可以考虑使用该功能:

  • 需要在单个 TiKV 实例支持更多的数据。
  • 具有大量写入吞吐。
  • 需要频繁地扩缩容。
  • 负载有较为严重的读写放大。
  • TiKV 内存尚有富余。

该功能的主要优势在于,提高写入性能,加快扩缩容速度,以及在相同硬件下支持更多数据和更大的集群。

使用方法

要启用 Partitioned Raft KV,需要在创建集群时将配置项 storage.engine 设为 "partitioned-raft-kv"。同时,在使用 Partitioned Raft KV 特性时,可以通过配置项 rocksdb.write-buffer-flush-oldest-firstrocksdb.write-buffer-limit 来控制 RocksDB 的内存使用。

使用限制

由于该功能为实验特性,目前有以下限制:

  • 暂不支持基于 EBS 的快照备份
  • 暂不支持 Online Unsafe Recovery 和 Titan
  • 不支持 tikv-ctl 命令行管理工具中的以下子命令:
    • unsafe-recover
    • raw-scan
    • remove-fail-stores
    • recreate-region
    • reset-to-version
  • 暂不兼容 TiFlash
  • 初始化以后不支持开启或者关闭