2013-11-25 2 views
5

Я пытаюсь выяснить, как восстановить состояние штормового затвора во время переключения при сбое. Я могу сохранить состояние извне (DB или файловая система), однако после повторного запуска экземпляра болта мне нужно указать конкретное состояние этого экземпляра болта, чтобы восстановить его. подготовить метод болта получает контекст, документированный здесь http://nathanmarz.github.io/storm/doc/backtype/storm/task/TopologyContext.htmlКак восстановить состояние болта во время перехода на другой ресурс

Что не ясно для меня это - есть ли часть этого контекста, который однозначно идентифицирует конкретный экземпляр болта, так что я могу понять, какие устойчивое состояние, чтобы указать ? Этот идентификатор сохранен во время перехода на другой ресурс? В качестве альтернативы, есть ли какая-либо переменная/объект, который я могу установить для конкретного болта/экземпляра, который сохраняется во время перехода на другой ресурс? Любая помощь ценится!

уш Sib

P.S. Новое в stackoverflow, так что PLS несут меня ...

ответ

0

Возможно, вы можете найти Trident Его в основном абстракция, построенная на вершине шторма. В документации указано:

Trident имеет первоклассные абстракции для чтения и записи в источники состояния. Государство может быть либо внутренней топологии - например, хранится в памяти и при поддержке HDFS - или внешне хранится в базе данных, как Memcached или Кассандры

В случае неисправности любого над ним говорит

Trident управляет состоянием отказоустойчивым способом, так что обновления состояния являются идемпотентными в результате попыток и сбоев.

Вы можете ознакомиться с документацией для дальнейшего уточнения.

+0

Tx для этого - я буду копать документы. С первого взгляда, похоже, я могу сохранить состояние «по транзакциям». Это выглядит хорошо, пока трезубец используется для обработки. То, что я пытаюсь сделать, - это вставить 3pp в болт, а 3pp имеет свою собственную постоянную стойкость. Я хотел бы восстановить состояние при перезапуске болта, поэтому все, что мне нужно сделать, это принять к сведению, где находится состояние, и быть уведомленным при перезапуске. Я подробно рассмотрю API trident и отправлю сообщение. – user3030851

0

В оригинальной Storm, как spout и bolt являются лицами без гражданства. Storm удалось перезапустить узлы, но для восстановления состояний узлов потребуется некоторое усилие. Есть два решения, которые я могу думать:

  1. Если сообщение не обрабатывать, Storm повторит его от ROOT топологии и логика replay должна быть реализована пользователем. Поэтому в этом случае я хотел бы добавить больше информации о состоянии (например, идентификатор некоторого внешнего хранилища состояния и идентификатор этой задачи) в сообщениях.
  2. Или вы можете использовать Trident. Он может обеспечить txid для каждой транзакции и упростить процесс хранения.

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

0

Вы можете использовать task ID.

Идентификаторы задач назначаются при создании топологии и являются статическими.Если задача умирает/перезапускается или переназначается где-то в другом месте, она все равно будет иметь тот же идентификатор.

Смежные вопросы