卡桑德拉读取后与LOCAL_QUORUM不一致

时间:2020-02-10 18:56:23

标签: java cassandra datastax cassandra-3.0 consistency

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

我们使用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和单个本地数据中心)写入不一致后的读取问题吗? 如果没有,那么什么可以解释这种一致性问题呢?

1 个答案:

答案 0 :(得分:0)

您可以执行以下命令来验证多少个节点具有密钥数据。

./nodetool getendpoints keyspacename tablename 'keyname'