Как определить добавленных и измененных детей после повторного подключения к Zookeeper? - PullRequest
0 голосов
/ 11 сентября 2018

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

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

  • Существует ли рекомендуемый \ стандартный метод для обработки таких ситуаций с использованием Zookeeper и Apache Curator?
  • Как определить текущее время эпохи в Zookeeper?

Мое предложение на данный момент:

  1. Мы отслеживаем последний раз, когда мы были подключены к Zookeeper.Это верно, прежде чем мы отключаемся.
  2. При повторном подключении мы просим слушателя clearAndRefresh , который запускает события CHILD_ADDED для всех дочерних узлов для отслеживаемого пути.
  3. Обрабатывая эти CHILD_ADDED события, мы обрабатывали их только для путей, которые были созданы или изменены после последнего подключения к Zookeeper.

1 Ответ

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

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

  • TreeCache , если вы хотите просмотреть все дерево
  • PathChildrenCache , если вы хотите посмотретьтолько подкаталог.

Неважно, какой вы используете, оба поддерживают прослушивание событий ChildAdded и DataChanged, которые будут делать именно то, что вам нужно.При повторном подключении после отключения куратор внутренне оценивает вновь добавленных детей и сравнивает данные существующих детей, чтобы определить изменения.Нет давления на вас.Вам нужно только использовать предоставленных слушателей.

С точки зрения точности TreeCache не гарантирует 100% точности.Таким образом, вам лучше, если вы сможете изменить дизайн и использовать PathChildrenCache.

...