Cassandra中的提示切换(当集群不能满足客户端指定的一致性级别时,Cassandra不存储提示)

Hinted handoff in Cassandra (When the cluster cannot meet the consistency level specified by the client, Cassandra does not store a hint)

我在博客中遇到了上述行 http://docs.datastax.com/en/archived/cassandra/2.0/cassandra/dml/dml_about_hh_c.html

这很令人困惑。假设我有 5 节点集群RF 为 3 并且 Write ConsistencyQuorum 即 2 个节点

现在,如果我尝试为给定的特定数据在三个副本节点中写点什么,两个就宕机了。那么,这是否意味着 cassandra 不会存储提示(因为它知道它无法首先满足给定的法定人数一致性)?并立即拒绝该写入,或者它将为他们存储提示并给出成功响应?

有人可以详细说明一下吗?

如果您的 RF=3 并且有 2 个节点已关闭或无法及时处理请求,则写入请求将失败,并且不会存储提示的切换。仅当可以满足请求的一致性级别 (CL) 并且您在提示切换 window 内时,才会存储提示切换。唯一的例外是使用 CL=ANY 编写的请求。

这里有两种不同的机制。让我举个例子来说明一下。

假设我有一个 3 个节点 的集群,具有 3 个复制 和一致性 Quorum(2). 这意味着当我写入数据库时​​,我必须得到两个响应才能满足我的查询。

满足我的查询后,节点必须将此写入发送到第三个节点。处理查询的节点尝试将写入发送到第三个节点。该节点当前不可用,这会导致该节点写入提示切换。然后它returns成功给客户端。

注意提示切换发生在一致性得到满足之后。提示切换确保写入到达所有持有副本的节点。

现在有一个例外,您发布的文章中提到了这一点。 一致性级别ANY是一个一致性级别,只要有一个节点可以为请求服务,就可以通过编写提示切换来满足。