Проблема согласованности Cassandra в кластерной системе

Предыстория. Мое приложение работает в кластерной системе (в которой 4 узла), и системное время этих четырех узлов синхронизируется по NTP. Я использую стратегии Write.QUORUM и Read.QUORUM. Вероятность этой проблемы не очень высока. Версия Cassandra 1.0.3, я пробовал Cassandra 1.1.1, эта проблема все еще существует.

Проблема: я удалил столбец, но через 6 секунд Cassandra все еще может получить старую запись, которая "isMarkedForDelete" по-прежнему ложна.

Кто-нибудь сталкивается с такой же проблемой? И как это решить?

Подробности: см. журнал ниже:

Узел 3 (локальный узел):
[pool-2-thread-42] 27.06.2012 14:49:23,732 SliceQueryFilter.java (строка 123) собирает 0 из 2147483647: SuperColumn( 667072 [......7fffffffffffffff000001382ca96c8b636b698a:false:36@1340779097312016,......)

[pool-2-thread-44] 2012-06-27 14:51:21,367 StorageProxy.java (строка 172) Mutations/ConsistencyLevel: [RowMutation(keyspace='drc', key='3332 ', модификации = [ColumnFamily(fpr_index [SuperColumn(667072 [7fffffffffffffff000001382ca96c8b636b698a:true:4@1340779881338000,]),])])]/QUORUM

-- Я удаляю эту запись в 14:51:21,367

[pool-2-thread-37] 2012-06-27 14:51:27,400 SliceQueryFilter.java (строка 123) собирает 0 из 2147483647: SuperColumn(667072 [......,7fffffffffffffff000001382ca96c8b636b698a :false:36@1340779097312016,......)

-- Но я все еще могу получить старую запись в 14:51:27,400

Node2:
[MutationStage:118] 2012-06-27 14:51:21,373 RowMutationVerbHandler.java (строка 48) Применение RowMutation(keyspace='drc', key='3332', модификации =[ColumnFamily(fpr_index [SuperColumn(667072 [7fffffffffffffff000001382ca96c8b636b698a:true:4@1340779881338000,]),])])

[MutationStage:118] 2012-06-27 14:51:21,374 RowMutationVerbHandler.java (строка 60) RowMutation(keyspace='drc', key='3332', модификации=[ColumnFamily(fpr_index [ SuperColumn(667072 [7fffffffffffffff000001382ca96c8b636b698a:true:4@1340779881338000,]),])]). Отправка ответа на 6692098@/192.168.0.3

[MutationStage:123] 27-06-2012 14:51:27,405 RowMutationVerbHandler.java (строка 48) Применение RowMutation(keyspace='drc', key='3332', модификации=[ColumnFamily(fpr_index [SuperColumn(667072) [.. ....,7fffffffffffffff000001382ca96c8b636b698a:false:36@1340779097312016,......])

[MutationStage:123] 2012-06-27 14:51:27,405 RowMutationVerbHandler.java (строка 60) RowMutation(keyspace='drc', key='3332', модификации=[ColumnFamily(fpr_index [ SuperColumn(667072 [......,7fffffffffffffff000001382ca96c8b636b698a:false:36@1340779097312016,.......]),])]). Отправка ответа на 6698516@/192.168.0.3

Node1:
[MutationStage:98] 2012-06-27 14:51:24,661 RowMutationVerbHandler.java (строка 48) Применение RowMutation(keyspace='drc', key='3332', модификации =[ColumnFamily(fpr_index [SuperColumn(667072 [7fffffffffffffff000001382ca96c8b636b698a:true:4@1340779881338000,]),])])

[MutationStage:98] 2012-06-27 14:51:24,675 RowMutationVerbHandler.java (строка 60) RowMutation(keyspace='drc', key='3332', модификации=[ColumnFamily(fpr_index [ SuperColumn(667072 [7fffffffffffffff000001382ca96c8b636b698a: true :4@1340779881338000,]),])]). Отправка ответа на 6692099@/192.168.0.3

[MutationStage:93] 2012-06-27 14:51:40,932 RowMutationVerbHandler.java (строка 48) Применение RowMutation(keyspace='drc', key='3332', модификации=[ColumnFamily(fpr_index) [SuperColumn(667072 [7fffffffffffffff000001382ca96c8b636b698a:true:4@1340779900915004,]),])])

DEBUG [MutationStage:93] 2012-06-27 14:51:40,933 RowMutationVerbHandler.java (строка 60) RowMutation(keyspace='drc', key='3332', модификации=[ColumnFamily(fpr_index) [SuperColumn(667072 [7fffffffffffffff000001382ca96c8b636b698a: true :4@1340779900915004,]),])]) применен. Отправка ответа на 6706555@/192.168.0.3

[ReadStage:55] 2012-06-27 14:51:43,074 SliceQueryFilter.java (строка 123) собирает 0 из 5000: 7fffffffffffffff000001382ca96c8b636b698a:true:4@1340779900915004

Узел 4:

Журнала об этой записи на узле 4 нет.


person Alex Huang    schedule 28.06.2012    source источник
comment
Ваш фактор репликации 3? (похоже на это из журналов, но, пожалуйста, подтвердите). Что говорит nodetool ring?   -  person DNA    schedule 30.06.2012
comment
Не могли бы вы вставить сюда, как вы создаете пространство ключей и таблицу, из которой вы удаляете столбец?   -  person ftrujillo    schedule 25.04.2014


Ответы (1)


Лучше избегать зависимости от удалений в Cassandra, поскольку они, как правило, ненадежны.

См. http://www.slideshare.net/planetcassandra/8-axel-liljencrantz-23204252 (в частности, слайд 34 и далее). Принудительное уплотнение может решить проблему.

person Christian Rolf    schedule 23.04.2015