cassandra 为什么复制因子为3的5节点群集的每个节点的行数不同?

v6ylcynt  于 8个月前  发布在  Cassandra
关注(0)|答案(3)|浏览(74)

我有5个机器节点连接在Cassandra分布式数据系统中。我将复制因子设置为3。
我了解到,对于3个节点的复制,数据将根据协调器节点的可用性分布在3个节点上。当我检查单个节点时,行数是不同的。我已经从csv向cassandra转移了大约100k行。这是否意味着,我必须对所有节点进行行计数才能得到结果?我正在使用dsbulk检查行数。
我是不是漏掉了什么?

gkn4icbw

gkn4icbw1#

5个节点,RF为3,加载了100 k行原始数据-假设没有丢失的突变,那么总共有300 k行数据分布在5个节点上。(3 x 100 k的RF)。
您提到数据是基于coordinator nodes availability分布的-但它是基于行的分区键的一致散列,关于哪些节点持有副本。
很可能是在使用DSBulk时,您使用的是默认一致性级别local_one(https://docs.datastax.com/en/dsbulk/docs/reference/driver-options.html#datastaxJavaDriverBasicRequestConsistency),并且在加载时有丢失的变化。将一致性级别至少更改为local_quorum /修复群集以使其恢复一致状态。

des4xlb0

des4xlb02#

你的dsbulk count命令是什么样子的?另外,通过CQLSH运行./dsbulk --version的输出是什么?DESCRIBE KEYSPACE your_keyspace_name;
你需要下面这样的东西,

./dsbulk count -k keyspace_name -t table_name <other configs> --datastax-java-driver.basic.request.consistency LOCAL_QUORUM
vpfxa7rd

vpfxa7rd3#

由于数据在集群中的分布方式,节点之间的行数永远不会完全相同。
在一个5节点的数据中心中,每个节点将 * 大约 * 拥有20%的数据。关键字是“粗略地”,因为每个节点拥有的令牌数量(令牌范围)并不绝对相同-有些节点的令牌范围稍大,而有些节点的令牌范围稍小,尽管百分比差异很小。
最重要的是,每个记录都使用一种算法随机分布在集群中的节点上,该算法将分区键散列为令牌值。数据的随机分布再次引入了一定程度的方差,因此每个节点不一定具有完全相同的数据量。
只有100 K分区,数据不会像您期望的那样均匀分布。直到你有数十亿个分区,你才会看到更接近平均分布。
请记住,对于默认的Murmur3Partitioner,分区键的可能哈希值(令牌)的数量范围从-263到263-1(或大约2128)--这是一个非常非常大的数字。相比之下,100 K甚至不到1%。干杯!干杯!

相关问题