我们正在运行一个cassandra集群,其本地数据中心为3个节点,并且(我相信)复制因子为3。 存在一个远程数据中心,但在我们的查询中未使用它。
我们使用Java库,更精确地说:
最近,我们遇到了与新行插入的写入一致性后读取相关的问题。
使用 LOCAL_QUORUM 一致性插入一行。成功插入几毫秒后,按分区键选择具有 LOCAL_QUORUM 一致性的行有时-很少-不成功。找不到行。
从我对LOCAL_QUORUM一致性的天真的理解,如果写了该行,然后使用LOCAL_QUORUM一致性(具有相同的数据中心)进行读取,则应该“始终”找到并读取该行。 但事实并非如此。
在阅读了Cassandra文档之后,我想知道时钟同步问题是否可以解释这个问题。例子:没有行的节点可以有一个提前的时钟,因此“无行”可以被认为是最新的值。
节点时钟同步问题确实可能解释了行插入(尽管有LOCAL_QUORUM和单个本地数据中心)写入不一致后的读取问题吗? 如果没有,那么什么可以解释这种一致性问题呢?
答案 0 :(得分:0)
您可以执行以下命令来验证多少个节点具有密钥数据。
./nodetool getendpoints keyspacename tablename 'keyname'