【问题标题】:Cassandra Read Consistency when write path fail写入路径失败时的 Cassandra 读取一致性
【发布时间】:2020-04-25 12:50:19
【问题描述】:

我是 cassandra 的新手,并试图弄清楚 cassandra 如何在写入失败的情况下提供一致性。考虑以下情况,其中 CL 为 QUORUM,在这种情况下,3 个副本中的 2 个必须响应。写入请求将照常发送到所有 3 个副本,如果写入 2 个副本失败,并且在 1 个副本上成功,cassandra 将返回 Failed。由于 cassandra 不回滚,因此该记录将继续存在于成功的副本上。现在,当读取带有 CL=QUORUM 时,读取请求将被转发到 2 个副本节点,如果其中一个副本节点是先前成功的节点,则 cassandra 将返回新记录,因为它将具有最新的时间戳。但从客户的角度来看,这条记录根本没有写入,因为 cassandra 在写入期间返回了失败。 如果是这种情况,那么 cassandra 在这种情况下将永远不会保持一致。 如何处理这种情况 请让我知道这种理解是否正确。

【问题讨论】:

  • Cassandra 偏向于教导最终的一致性。所以如果仍然想要一致性,你必须重新考虑 Cassandra 是否适合你。或者使用 RF 是复制因子 =3

标签: database cassandra cassandra-2.0 cassandra-2.1 eventual-consistency


【解决方案1】:

你的理解是正确的。在这种情况下,客户端应该会收到UnavailableException,但应该明白写入最终会传播到其他副本(如果节点是活动的或活动的),并且这不是失败的写入。

更多详情请看以下文章:

【讨论】:

  • 感谢分享链接。在上述场景中,由于在写入过程中不满足 CL,因此 cassandra 将返回 writeTimeOut。一个副本节点上的成功写入最终会传播到其他节点吗?
猜你喜欢
  • 2015-08-08
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2017-02-02
  • 2022-01-05
  • 1970-01-01
  • 2020-05-26
  • 1970-01-01
相关资源
最近更新 更多