为什么即使满足一致性级别,cassandra写入也会失败?

问题描述 投票:0回答:1

我有以下配置的cassandra集群设置: -

  • 节点: - 3
  • 数据中心: - dc1
  • 复制因子:-3
  • 一致性: - LOCAL_QUORUM

我创建了一个示例spring boot api,它在keypace(test)中以递归方式插入表(testing1)。

在执行写操作之前,我已经使用tc命令在其中一个节点中引入了延迟(2100ms),因此当执行写操作时,我们得到writetimeoutexception,因为在cassandra.yaml中write_request_timeout被设置为2000ms。 Cassandra仍然应该成功执行写操作,因为所需的节点确认满足一致性级别(2)正在工作,没有任何延迟,但我得到以下异常: -

com.datastax.driver.core.exceptions.WriteTimeoutException:在一致性LOCAL_QUORUM的写查询期间Cassandra超时(需要2个副本但只有1个确认写入)。

即使ack(2)所需的节点启动并运行,为什么写入失败?

spring-boot cassandra datastax spring-data-cassandra
1个回答
2
投票

写入必须在超时内完成,以避免超时异常。无论节点是否已启动。

Cassandra仍应成功执行写操作,因为需要的节点可以达到一致性级别(2)

不,它不应该也不会。如果超时超过节点可能会丢失突变并依赖提示,读取修复和反熵修复来解决它。突变的状态是未知的,并作为错误返回,因此可以重试或至少不假定在仲裁中应用它,以便它不会破坏一致性合同。

© www.soinside.com 2019 - 2024. All rights reserved.