【问题标题】:cassandra column data appears after a long delay and with incorrect timestampscassandra 列数据在长时间延迟后出现并且时间戳不正确
【发布时间】:2013-05-06 20:11:50
【问题描述】:

我正在使用具有标准列类型和复合类型键的 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 的值。当我使用 cassandra-cli 观察数据时,即使经过几个小时,它也不会显示密钥 2:a。后来,密钥 1:a、1:b 被删除,最终 - 几个小时后,密钥 2:a 出现,但时间戳早于 1030 - 比如 990。

我读到,如果节点之间存在时钟差异,那么拥有最新时间戳的写入者会覆盖其他节点。如果它们相同,则按字典顺序较高的值胜过较低的值。但是,在我的例子中,只有一个写入器进程更新列族,写入器只更新键 2:a,然后删除 1:a 和 1:b。因此,同一个键没有多个写入者。编写器是多线程的,所以线程接触不同的键,但不是同一个键。

所以我的问题是:

  1. 在什么情况下我们可以有不显示的键,即使在写入发生很长时间后?
  2. 什么会导致密钥的时间戳混乱?在上面的示例中,2:a 的时间戳应该是 1030,但最终看到时显示的是 990。

有人可以分享一些可能出现问题的指针,或者如何解决问题,或者任何有用的文章来分析问题吗?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    Cassandra 不会立即删除数据。列被标记为墓碑,稍后将通过压缩删除,这解释了您的延迟几个小时。具有最高时间戳的环中的数据始终被选为正确的值,无论它是否被标记为墓碑。尽管我无法确定,但节点时间不同步很可能是您的情况。我强烈建议您在所有机器上安装 ntp,等到所有时间同步后再尝试测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-18
      • 2016-05-04
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多