Почему запись на кассандру не выполняется, даже если достигнут уровень согласованности? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть настройка кластера cassandra со следующими конфигурациями: -

  • Узлы: - 3
  • Датацентр: - dc1
  • Коэффициент репликации: -3
  • Согласованность: - LOCAL_QUORUM

Я создал пример API весенней загрузки, который рекурсивно вставляется в таблицу (testing1) в пространство ключей (тест).

Перед выполнением операции записи я ввел задержку (2100 мс) в ответ на одном из узлов с помощью команды tc, поэтому, когда операция записи выполняется, мы получаем writetimeoutexception, поскольку для write_request_timeout установлено значение 2000 мс в cassandra.yaml. Кассандре все равно следует успешно выполнить операцию записи, поскольку необходимые узлы для подтверждения соответствия уровню согласованности (2) работают без каких-либо задержек, но я получаю следующее исключение: -

com.datastax.driver.core.exceptions.WriteTimeoutException: тайм-аут Cassandra во время запроса записи в соответствии LOCAL_QUORUM (требовалось 2 реплики, но только 1 подтвердил запись).

Почему происходит сбой записи, даже когда необходимые узлы для ack (2) запущены и работают?

1 Ответ

0 голосов
/ 12 сентября 2018

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

Кассандре все равно следует успешно выполнить операцию записи, так как узлам необходимо подтвердить соответствие уровню согласованности (2)

Нет, это не должнои не буду.Если время ожидания превышено, узлы могут отбросить мутацию и полагаться на подсказки, прочитать исправления и исправления антиэнтропии, чтобы устранить их.Состояние мутации неизвестно и возвращается как ошибка, поэтому его можно повторить или, по крайней мере, не предполагать, что оно будет применено в кворуме, чтобы не нарушать соглашения о согласованности.

...