Apache ZooKeeper - это своего рода высокодоступный хранилище данных для небольших объектов. Кластер ZooKeeper состоит из некоторых узлов, которые сохраняют весь набор данных в своей памяти. Набор данных называется "всегда согласованным", поэтому каждый node имеет одинаковые данные в каждый момент времени.
В соответствии с документацией и сообщения в блоге, каждый node в кластере может отвечать на чтение и принимать записи.
- Считывание всегда выполняется локально с помощью node, поэтому связь с кластером не выполняется.
- Записи пересылаются назначенному "Лидеру" node, который пересылает запрос на запись всем узлам и ждет их ответов. Если отвечает хотя бы половина узлов, запись считается успешной.
Вопрос: Почему для лидера достаточно ждать, пока половина узлов ответит? Если кто-то подключается к одному из узлов, которые не получили обновление, он получает устаревший результат (только локальный считывает локальное значение).