我正在运行一个 Spark 作业,该作业填充 scylla 中的一个表。表中的主键是长类型,它本质上包含电话号码。如果说这个字段的潜在值(value),肯定不会统一,因为大多数电话号码都集中在9-12位数字之间。
对于我的 scylla 配置,它是一个具有 3 个节点、复制因子为 3 的单个集群。我的问题是,由于主键本身是倾斜的,所以读/写操作会在每个节点上倾斜,还是 scylla 在对主键进行哈希处理后会选择节点哪个键可以使操作统一?
我发现特定节点的操作数量有时会跳跃,但我希望在采取任何步骤之前能够 100% 确定。
最佳答案
分区的节点由主键的 Murmur3 哈希确定。
例如,电话号码 920-458-3834
被哈希为 3485763808729355786
的 token ,并最终被写入负责 token 范围的节点包括3485763808729355786
。
也许下一个电话号码与之前的电话号码类似,例如 920-458-3835
。它被散列为 -6305759902789073081
,并且在大型集群中可能会被写入不同的节点。
seen that number of operations sometimes jump for a particular node
不确定集群或应用程序设置,但这可能是协调器节点。
关于cassandra - 如果电话号码用作表的主键,scylla/cassandra 集群上的读/写操作是否会发生偏斜?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77000284/