首页 文章

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

提问于
浏览
0

我有以下配置的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: Cassandra timeout during write query at consistency LOCAL_QUORUM (2 replica were required but only 1 acknowledged the write).

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

1 回答

  • 2

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

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

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

相关问题