为什么具有 RF 3 的 3 节点集群上的负载不同?

Why is the load different on a 3 node cluster with RF 3?

我有一个复制因子为 3 的 3 节点 Cassandra 集群。 这意味着所有数据都应该复制到所有 3 个节点上。

nodetool status输出如下:

--  Address      Load       Tokens       Owns (effective)  Host ID                               Rack
UN  192.168.0.1  27.66 GB   256          100.0%            2e89198f-bc7d-4efd-bf62-9759fd1d4acc  RAC1
UN  192.168.0.2  28.77 GB   256          100.0%            db5fd62d-3381-42fa-84b5-7cb12f3f946b  RAC1
UN  192.168.0.3  27.08 GB   256          100.0%            1ffb4798-44d4-458b-a4a8-a8898e0152a2  RAC1

这是所有 3 个节点上随时间变化的磁盘使用情况图:

我的问题是为什么这些尺寸差异如此之大?难道compaction没有同时运行?

我想说有几个因素可以在这里发挥作用。

如您所见,压缩不会同时 运行,因此每个节点上的 SSTables 的数量和内容会有所不同。

memtables 也不会同时刷新到 SSTables,所以从一开始,每个节点都会有一些不同的 SSTables。

如果您对 SSTable 使用压缩,鉴于它们的内容有些不同,通过压缩数据节省的 space 量会有所不同。

即使您使用的复制因子为 3,我认为非主要范围数据的存储 space 与主要范围数据的存储 space 略有不同,并且很可能更多的主要范围数据被映射到一个节点或另一个节点。

所以基本上除非每个节点在完全相同的时间看到完全相同的消息序列,否则它们不会有完全相同的数据大小。