cassandra一致性级别

mnowg1ta  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(502)

考虑一个由4个节点组成的集群。
复制因子已设置为3。
我们给出了一个写查询,一致性级别设置为所有副本,但只有一个副本成功地写入了数据,而另外两个副本没有响应(写入时崩溃)
在这种情况下,协调员的React是 TimeOutException 因此,我们认为我们的请求未能持续。
然后,我们对一致性级别设置为1的同一行\u键进行读取查询,协调器将此请求发送到成功写入上一个请求的同一节点。
我的问题是接下来会发生什么?此读取查询是否返回值?如果是这样的话,这种行为真的有意义吗?因为我们首先抛出了不可用的异常?

mjqavswn

mjqavswn1#

澄清后修改了答案
Cassandra可以提前回答 UnavailableException 如果它有信息(基于流言蜚语),给定的cl将无法实现,因为它没有足够的副本。
协调器节点将尝试写入所有所需的副本,如果其中一些副本在操作过程中崩溃,则协调器可以为它们写入一个提示,该提示将在节点返回后重播(默认情况下为3小时)。协调节点应返回 WriteTimeoutException 或者 WriteFailureException .
即使节点没有返回,并且您正在使用 ONE 或者 LOCAL_ONE ,然后您可以取回数据。这就是所谓的最终一致性—数据最终将通过提示或修复传播到所有副本。
您可以在datastax架构指南中找到有关cassandra如何使用一致性级别写入和读取数据的更多信息。

相关问题