【问题标题】:Cassandra read after write inconsistency with LOCAL_QUORUMCassandra 写入后读取与 LOCAL_QUORUM 不一致
【发布时间】:2020-05-26 03:26:08
【问题描述】:

我们正在运行一个具有 3 个节点的本地数据中心和(我相信)复制因子为 3 的 cassandra 集群。 存在远程数据中心,但未在我们的查询中使用。

更准确地说,我们使用 Java 库:

  • org.apache.cassandra:cassandra-allcom.datastax.cassandra:cassandra-driver-core 均 v3.1.1 用于数据库交互
  • info.archinnov:achilles-core v5.1.3 用于代码源注释处理 - 这是指定 LOCAL_QUORUM 一致性级别的地方

最近,我们遇到了与新行插入的后写一致性相关的问题。

使用 LOCAL_QUORUM 一致性插入行。成功插入后几毫秒,具有 LOCAL_QUORUM 一致性的分区键的行选择有时 - 很少 - 不成功。找不到行。

根据我对 LOCAL_QUORUM 一致性的天真理解,如果该行先写入然后使用 LOCAL_QUORUM 一致性读取(具有相同的数据中心),则应该“始终”找到并读取它。 但这似乎不是正在发生的事情。

阅读 Cassandra 文档后,我想知道时钟同步问题是否可以解释该问题。示例:没有行的节点可能有一个提前的时钟,因此“无行”可能被认为是最新的值。

节点时钟同步问题是否确实可以解释行插入的读写不一致(尽管有 LOCAL_QUORUM 和单个本地数据中心)? 如果不是,如何解释这种一致性问题?

【问题讨论】:

  • 你能检查你的键空间的复制因子吗?
  • 也许确保您执行的查询带有时间戳,这样您就知道第二个查询在后面,然后确保您的客户时钟同步。
  • @Alex Ott 复制因子被确认为等于 3
  • 我的意思是 - 什么复制策略?

标签: java cassandra datastax cassandra-3.0 consistency


【解决方案1】:

你可以执行下面的命令来验证,有多少节点有key的数据。

./nodetool getendpoints keyspacename tablename 'keyname'

【讨论】:

    猜你喜欢
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2021-11-13
    • 2012-08-24
    • 2020-04-25
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多