【发布时间】:2020-05-26 03:26:08
【问题描述】:
我们正在运行一个具有 3 个节点的本地数据中心和(我相信)复制因子为 3 的 cassandra 集群。 存在远程数据中心,但未在我们的查询中使用。
更准确地说,我们使用 Java 库:
- org.apache.cassandra:cassandra-all 与 com.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