Cassandra全分片读取机制问询:请求分配与副本选择逻辑
Cassandra 读取请求的副本分配机制解析
核心结论:没有采用二次一致性哈希选择读取副本
Cassandra 对分片副本的读取请求分配,是基于一致性级别和复制策略定义的副本列表来执行的,不存在二次一致性哈希的逻辑。
具体分配逻辑
- 按一致性级别选择请求目标:
- 当一致性级别为
ONE/LOCAL_ONE:客户端会从分片的副本列表中随机挑选一个节点发送请求,收到有效响应后直接返回结果。 - 当一致性级别为
QUORUM/LOCAL_QUORUM/EACH_QUORUM:客户端会向副本列表中足够数量的节点发送请求(数量满足仲裁数要求),收集到足够多的一致响应后,就会返回合并后的结果。 - 当一致性级别为
ALL:客户端会向该分片的所有副本节点发送请求,等待所有节点返回后,基于时间戳对比取最新版本的数据返回。
- 当一致性级别为
- 副本列表的生成逻辑:
副本列表由预先配置的复制策略(如SimpleStrategy、NetworkTopologyStrategy)结合一致性哈希生成,客户端会优先选择拓扑距离更近的节点(比如同数据中心节点),同时避开不可用节点,但整个过程没有二次哈希计算。
关于"利用所有分片副本读取"的场景
只有当一致性级别设为ALL时,用户发起的读取请求才会主动访问所有副本;另外,Cassandra 的后台读修复操作会定期对比分片的所有副本数据,同步不一致内容,但这属于后台维护流程,并非用户请求的常规路径。
内容的提问来源于stack exchange,提问作者vamsi krishna
相关产品推荐
相关产品推荐

