Cassandra 文档中的以下声明是我怀疑的原因。
例如,如果使用复制因子为 3 的 QUORUM 写入一致性级别,Cassandra 会将写入复制到集群中的所有节点,并等待两个节点的确认。如果写入在一个节点上失败,但在另一个节点上成功,Cassandra 会报告在该节点上复制写入失败。但是,在另一个节点上成功的复制写入不会自动回滚。
Ref : http://docs.datastax.com/en/cassandra/2.1/cassandra/dml/dml_atomicity_c.html
那么,即使无法满足一致性,Cassandra 也会写入节点(已启动)吗?
我得到了它。如果 Cassandra 知道无法满足一致性,它甚至不会尝试写入。如果可以满足一致性,但没有足够的副本来满足复制因子,那么 Cassandra 将写入当前可用的副本并给出成功消息。稍后,当副本再次启动时,它将写入其他副本。
例如如果复制因子为 3 ,则 3 个节点中有 1 个已关闭,那么如果我以 2 的一致性进行写入,则写入将成功。但如果复制因子为 2 并且 2 个节点中的 1 个已关闭,那么如果我以 2 的一致性进行写入,Cassandra 甚至不会写入可用的单个节点。
文档中提到的是在能够满足一致性的情况下发起while write的情况。但中间有一个节点宕机,无法完成写入,而另一节点却写入成功。由于无法满足一致性,客户端将收到失败消息。写入单个节点的记录稍后将在节点修复或压缩期间删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)