title | summary |
---|---|
分区 Raft KV |
了解 TiKV 的分区 Raft KV 特性。 |
警告:
分区 Raft KV 目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 issue 反馈。
v6.6.0 之前,基于 Raft 的存储引擎,TiKV 使用单个 RocksDB 实例存储该 TiKV 实例所有 Region 的数据。
为了更平稳地支持更大的集群,从 v6.6.0 开始,TiDB 引入了一个全新的 TiKV 存储引擎,该引擎使用多个 RocksDB 实例来存储 TiKV 的 Region 数据,每个 Region 的数据都独立存储在单个 RocksDB 实例中。
新的 TiKV 引擎能够更好地控制 RocksDB 实例的文件数和层级,并实现了 Region 间数据操作的物理隔离,避免相互影响。同时,该引擎支持平稳管理更多的数据。你可以理解为,TiKV 通过分区管理多个 RocksDB 实例,这也是该特性分区 Raft KV 名字的由来。
如果你的 TiKV 集群有以下特点,可以考虑使用该功能:
- 需要在单个 TiKV 实例支持更多的数据。
- 具有大量写入吞吐。
- 需要频繁地扩缩容。
- 负载有较为严重的读写放大。
- TiKV 内存尚有富余。
该功能的主要优势在于,提高写入性能,加快扩缩容速度,以及在相同硬件下支持更多数据和更大的集群。
要启用分区 Raft KV,需要在创建集群时将配置项 storage.engine
设为 "partitioned-raft-kv"
。同时,在使用分区 Raft KV 特性时,可以通过配置项 rocksdb.write-buffer-flush-oldest-first
和 rocksdb.write-buffer-limit
来控制 RocksDB 的内存使用。
由于该功能为实验特性,目前有以下限制:
- 暂不支持基于 EBS 的快照备份。
- 暂不支持 Online Unsafe Recovery 和 Titan。
- 暂不支持 tikv-ctl 命令行管理工具。
- 初始化以后不支持开启或者关闭。