cassandra列数据在长时间延迟后显示,时间戳不正确

ddhy6vgd  于 2021-06-15  发布在  Cassandra
关注(0)|答案(1)|浏览(316)

我使用的是带有标准列类型和复合类型键的cassandra列族。cassandra集群有3个节点,复制因子为3。从列族中插入、更新和删除数据。
例如,假设列族的当前状态为

Row X  
column=1:a, value=v1, timestamp=1000  
column=1:b, value=v2, timestamp=1010  
column=2:a, value=v3, timestamp=1020

许多更新会在一段时间内发生,其中 Row X 可以更新,有时插入或删除新行。
我观察到的问题是,假设关键字为2:a的列在 timestamp=1030 值为v4。当我使用cassandracli来观察数据时,它不会显示键2:a,即使在几个小时之后。后来,键1:a,1:b被移除,最终——几个小时后,键2:a出现,但时间戳早于1030——比如990。
我读到,如果节点之间存在时钟差异,那么具有最新时间戳的写入程序将覆盖其他节点。如果它们是相同的,那么从字典的Angular 来看,较高的值胜过较低的值。但是,在我的例子中,只有一个writer进程更新列族,writer只更新键2:a,然后删除1:a和1:b。所以同一个键没有多个writer。writer是多线程的,因此线程可以接触不同的键,但不能接触同一个键。
所以我的问题是:
在什么情况下,我们可以有钥匙不出现,即使很长一段时间后,写入发生了?
什么会导致密钥的时间戳出错?在上面的例子中,2:a应该有1030的时间戳,但是当它最终被看到时显示为990。
有人能分享一些关于什么可能是错的,或者如何着手解决问题的建议,或者任何有用的文章来分析问题吗?

0kjbasz6

0kjbasz61#

Cassandra不会立即删除数据。列被标记为墓碑,而不是稍后将被删除压缩,这解释了你几个小时的滞后。时间戳最高的环中的数据总是被选为正确的值,而不管它是否被标记为墓碑。尽管我不能确定,节点时间不同步很可能就是你的情况。我强烈建议您在所有计算机上安装ntp,等到所有时间都同步后再试一次。

相关问题