У нас есть 2 узла кластера Cassandra. Коэффициент репликации равен 1, а уровень согласованности - 1. Мы не используем репликацию, так как данные, которые мы вставляем, очень велики для каждой записи. Как реагирует Кассандра, когда узел опущен, когда запись выполняется в этом узле? Мы используем API-интерфейс Hector от клиента Java. Я понимаю, что Cassandra выполнит запись на другой запущенный узел.как кассандра реагирует, когда запись выполняется в узле и узле, опустилась
1
A
ответ
2
Нет, используя CL.ONE, запись не будет выполняться, если вставленные данные относятся к токенранту сбитого узла. Уровень согласованности определяет, сколько реплик-узлов должно ответить, чтобы принять запрос.
Если вы хотите писать, даже если узел реплики не работает, вам нужно использовать CL.ANY. ЛЮБОЙ убедитесь, что координатор сохраняет подсказку для запроса. Советы хранятся в таблице System.Hints. После того, как реплика снова вернется, все подсказки будут обработаны и отправлены на предстоящий узел.
Редактировать
Вы получите следующее сообщение об ошибке:
com.datastax.driver.core.exceptions.UnavailableException: Not enough replica available for query at consistency ONE (1 required but only 0 alive)
Другими словами, запрос на запись будет возвращать ошибку в ситуации OP описывает. – Brandon
Спасибо Зерд и Брэндон. API-интерфейс Hector не вызывает каких-либо исключений, но в журнале отображаются предупреждающие сообщения о статусе узла вниз. Когда я завершаю узел 2, тогда API Hector бросает исключение. Я использую версию cassandra 2.0.5 и версию hector 1.1 –