У меня есть кластер Cassandra с 3 компьютерами, использующий стратегию неосторожных размещений в стойке с коэффициентом репликации 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.Это не оказало никакого влияния на значения счетчика.
Проверка данных показала, что нижние значения счетчиков являются правильными, поэтому я подозреваю, что либо Cassandra (или Hector, который я использовал в качестве API для вызова Cassandra из Java) повторили некоторые приращения.
Есть какие-нибудь идеи, как восстановить данные и, возможно, предотвратить повторение ситуации?