Кассандра: противоречивые данные о чтениях (LOCAL_QUORUM) - PullRequest
0 голосов
/ 12 октября 2018

Мы видим противоречивые данные во время чтения на Кассандре.Вот подробности:

Это широкая таблица столбцов.К столбцам можно добавлять мои несколько машин и читать на нескольких машинах.Время между записью и чтением указывается в минутах, но иногда может быть в секундах.Пишет бывает каждые 2 минуты.

Теперь во время чтения мы наблюдаем следующие случаи несовместимых чтений:

  • Добавлен один столбец.Если чтение было выполнено после добавления столбца (от 20 секунд до 2 минут после записи), Кассандра не возвращает данных.Как будто ключ не существует.Если приложение повторяется, оно получает данные.
  • Существует несколько столбцов для ключа строки.И был добавлен новый столбец «n».Опять же, чтение происходит через несколько минут после записи.На этот раз возвращается только последний столбец n.В этом случае приложение не знает, что данные неполные, поэтому оно не повторяется.Если мы повторим попытку вручную, мы увидим все столбцы.
  • Для ключа строки существует несколько столбцов.И добавлен новый столбец «n».Когда после записи происходит чтение, возвращаются все столбцы, кроме «n».

Вот что мы проверили:

  • При записи и чтении используется уровень согласованности 'LOCAL_QUORUM'.
  • Репликация в локальном центре обработки данных,Удаленный центр обработки данных не участвует в чтении или записи.
  • Во время несогласованного чтения ни один из узлов не подвергается паузам GC
  • В журналах кассандры нет ошибок
  • Чтение всегда происходит после записи.

Несколько других подробностей: Версия Cassandra: 2.1.9 Версия драйвера Java DataStax: 2.1.10.2 Коэффициент репликации: 3

Мы не видим этой проблемы в более низких средах.Мы видели, как это случалось один или два раза в прошлом году, но с последних нескольких дней это происходит довольно часто.В среднем 2 непоследовательных чтения каждую минуту.

Вот как выглядит определение таблицы:

CREATE TABLE "MY_TABLE" (
  key text,
  sub_key text,
  value text,
  PRIMARY KEY ((key), sub_key)
) WITH
  bloom_filter_fp_chance=0.010000 AND
  caching='{"keys":"ALL", "rows_per_partition":"NONE"}' AND
  comment='' AND
  dclocal_read_repair_chance=0.100000 AND
  gc_grace_seconds=864000 AND
  read_repair_chance=0.000000 AND
  default_time_to_live=0 AND
  speculative_retry='ALWAYS' AND
  memtable_flush_period_in_ms=0 AND
  compaction={'class': 'SizeTieredCompactionStrategy'} AND
  compression={'sstable_compression': 'LZ4Compressor'};

Пожалуйста, укажите нам правильное направление.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...