一些特殊场景下的Cassandra一致性级别

Cassandra Consistency Level In Some Special Scenario

考虑一个包含 4 个节点的集群。

复制因子已设置为 3。

我们给出了一个一致性级别设置为 ALL 的写入查询,但只有一个副本成功写入数据,另外两个从未响应。 (写入时崩溃)

在这种情况下,协调器以 TimeOutException 响应,因此我们认为我们的请求未能持续。

然后我们对相同的 row_key 进行了读取查询,一致性级别设置为 1,协调器将此请求发送到与前一个请求成功写入的同一节点。

我的问题是接下来会发生什么?这个读取查询returns是否有值?如果是这样,这种行为真的有意义吗,因为我们首先抛出了 UnavailableException?

澄清后修改答案

如果 Cassandra 有信息(基于 Gossip)表明由于没有足够的副本而无法实现给定的 CL,它可以用 UnavailableException 尽早回答。

协调器节点将尝试写入所有需要的副本,如果其中一些在操作过程中崩溃了,那么协调器可能会为它们写一个提示,将在节点返回后重播(默认为 3 小时) .协调器节点应该 return WriteTimeoutExceptionWriteFailureException.

即使节点未返回,并且您正在使用 ONELOCAL_ONE 读取,您也可以取回数据。这就是所谓的最终一致性 - 数据最终将传播到所有副本 - 通过提示或修复。

您可以在 DataStax Architecture Guide.

中找到有关 Cassandra 如何以一致性级别写入和读取数据的更多信息