1

我有一个 3 机器 Cassandra 集群,它使用机架不感知放置策略,复制因子为 2。

列族定义如下:

create column family UserGeneralStats  with  comparator = UTF8Type  and default_validation_class = CounterColumnType;

不幸的是,经过几天的生产使用,我得到了一些不一致的计数器值:

查询副本 1:

[default@StatsKeyspace] list UserGeneralStats['5261666978': '5261666978'];  
Using default limit of 100
-------------------
RowKey: 5261666978
=> (counter=bandwidth, value=96545030198)
=> (counter=downloads, value=1013)
=> (counter=previews, value=10304)

查询副本 2:

[default@StatsKeyspace] list UserGeneralStats['5261666978': '5261666978'];
Using default limit of 100
-------------------
RowKey: 5261666978
=> (counter=bandwidth, value=9140386229)
=> (counter=downloads, value=339)
=> (counter=previews, value=1321)

由于标准读取修复机制似乎无法修复值,因此我尝试使用 nodetool repair 强制进行反熵修复。它对计数器值没有任何影响。

数据检查显示计数器的较低值是正确的,所以我怀疑 Cassandra(或我用作 API 从 Java 调用 Cassandra 的 Hector)重试了一些增量。

任何想法如何修复数据并可能防止这种情况再次发生?

4

1 回答 1

0

如果 RR 和 repair 都没有修复它,它可能是一个错误。

请升级到 0.8.3(今天发布)并确认它仍然存在于该版本中,然后您可以在https://issues.apache.org/jira/browse/CASSANDRA提交票证。

于 2011-08-08T17:14:42.167 回答