Кассандра прочитала после записи несоответствие с LOCAL_QUORUM - PullRequest
0 голосов
/ 10 февраля 2020

Мы запускаем кластер кассандры с локальным центром обработки данных из 3 узлов и (я полагаю) коэффициентом репликации 3. Удаленный центр обработки данных существует, но не используется в наших запросах.

Мы используем Java библиотек, точнее:

  • org. apache .cassandra: cassandra-all в сочетании с com.datastax.cassandra: cassandra- драйвер-ядро v3.1.1 для взаимодействия с базой данных
  • info.archinnov: achilles-core v5.1.3 для обработки аннотаций исходного кода - здесь LOCAL_QUORUM указан уровень согласованности

Недавно мы столкнулись с проблемами, связанными с согласованностью чтения после записи для вставки новой строки.

Строка вставляется с использованием LOCAL_QUORUM последовательность. Через несколько миллисекунд после успешной вставки строка, выбранная по ключу секционирования с согласованностью LOCAL_QUORUM , иногда - редко - неудачно. Строка не может быть найдена.

Из моего наивного понимания согласованности LOCAL_QUORUM, если строка записывается, то читается с использованием согласованности LOCAL_QUORUM (с тем же центром обработки данных), ее следует «всегда» находить и читать . Но, похоже, это не то, что происходит.

После прочтения документации Cassandra мне интересно, могут ли проблемы с синхронизацией часов объяснить эту проблему. Пример: узел без строки может иметь заранее установленные часы, и поэтому «нет строки» может рассматриваться как наиболее обновленное значение.

Возможно ли, что проблемы синхронизации часов узла могут объяснить чтение после записи несоответствие для вставки строки (несмотря на LOCAL_QUORUM и один локальный центр обработки данных)? Если нет, то чем можно объяснить такую ​​проблему согласованности?

1 Ответ

0 голосов
/ 11 февраля 2020

Вы можете выполнить нижеприведенную команду, чтобы проверить, сколько узлов имеет данные для ключа.

./nodetool getendpoints keyspacename tablename 'keyname'
...