Как определить добавленных и измененных детей после повторного подключения к Zookeeper?
Мы используем Zookeeper для координации выполнения задач среди наших кластерных серверов. У одного из наших клиентов очень нестабильная сеть, и наши серверы продолжают отключаться и подключаться к Zookeeper.
Проблема в том, что при отключении наши серверы будут пропускать произошедшие события и не будут обрабатывать их даже после повторного подключения к Zookeeper.
- Есть ли рекомендуемый \ стандартный метод для обработки таких ситуаций с использованием Zookeeper и Apache Curator?
- Как определить текущее время эпохи в Zookeeper?
Мое предложение до сих пор:
- Мы отслеживаем последний раз, когда мы были связаны с Zookeeper. Это верно, прежде чем мы отключимся.
- При повторном подключении мы просим слушателя clearAndRefresh, который запускает события CHILD_ADDED для всех дочерних узлов для отслеживаемого пути.
- Обрабатывая эти события CHILD_ADDED, мы обрабатывали их только для путей, которые были созданы или изменены после того, как мы в последний раз были подключены к Zookeeper.
1 ответ
Я не думаю, что использование метки времени будет хорошей идеей. Вместо этого вы можете использовать встроенный куратор:
- TreeCache, если вы хотите посмотреть все дерево
- PathChildrenCache, если вы хотите смотреть только подкаталог.
Неважно, какой вы используете, оба поддерживают прослушивание ChildAdded
а также DataChanged
события, которые будут делать именно то, что вам нужно. При повторном подключении после отключения куратор внутренне оценивает вновь добавленных детей и сравнивает данные существующих детей, чтобы определить изменения. Нет давления на вас. Вам нужно только использовать предоставленных слушателей.
С точки зрения точности TreeCache не гарантирует 100% точности. Таким образом, вам лучше, если вы сможете изменить дизайн и использовать PathChildrenCache.