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