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

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

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

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

Мое предложение до сих пор:

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам