2015-09-23 3 views
0

Я пытаюсь создать сценарий, в котором у меня есть носик, который считывает данные из брокера сообщений и отправляет сообщение в виде кортежа в Bolt для некоторой обработки.Испускающий набор для разных болтов

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

Предполагая, что у меня есть конечные получатели (в моем случае есть 3 Message Brokers для вывода).

Так, Bolt1 постобработка может либо удалить сообщение непосредственно в этих 3-х брокеров Message

Теперь, если я использую один болт здесь, который падает на сообщения в этих трех брокеров по себе и позволяет сказать, один из них не может (из-за недоступности и т. д.), на котором я называю метод сбоя коллектора.

Как только метод сбоя вызывается на болт, в моем методе сбоя Spout вызывается Invoked.

Здесь я считаю, что мне придется снова обработать все сообщение еще раз (я должен убедиться, что все сообщения должны быть обработаны), хотя 2 из 3 сообщений успешно доставлены.

В качестве альтернативы, даже если я испускаю эти 3 вспомогательные сообщения на разные болты, я думаю, что даже в этом случае Spout придется обрабатывать все сообщение снова.

Это потому, что я добавляю уникальный указатель с сообщением, излучая его в первый раз в методе nextTuple().

Есть ли способ обеспечить, чтобы обработанное сообщение не было обработано, а не целое?

Благодаря

ответ

0

Сторм (низкий уровень Java API) предоставляет только «по-крайней мере, один раз» обработки гарантий, то есть, нет никакой поддержки, чтобы избежать дублирования обработки на случай выхода из строя.

Если вам нужно ровно один раз, вы можете использовать Trident поверх Storm. Однако даже Trident не может дать ровно один раз, если вы передаете данные во внешнюю систему (если внешняя система не может обнаружить и удалить дубликаты). Это не буря, а общая проблема. Другие системы, такие как Apache Flink, Apache Spark Streaming или S-Store (недавняя исследовательская прототипная система от MIT -> Stonebraker), «страдают» от одной и той же проблемы.

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

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