2015-03-18 6 views
1

Я пытаюсь начать работу с Storm Trident и настроить топологию с IOpaquePartitionedTridentSpout и под управлением OpaqueMap.Как узнать, успешно ли совершена транзакция в Apache Storm Trident

Тем не менее, я изо всех сил стараюсь узнать, как можно сообщить, что транзакция успешно совершена или нет. Я не вижу никакого метода ack или fail, как в обычном интерфейсе Stout spout/bolt.

Мой прецедент состоит только в том, чтобы испускать кортеж категории, когда предыдущая одна и та же категория обрабатывается и сохраняется (или не удалась). Потому что я буду использовать обработанные данные для обновления моего следующего кортежа категории. Кортежи из разных категорий могут быть параллельными процессами.

Поток разделен по категориям с помощью метода partitionBy.

Установка max_spout_pending в 1 устраняет проблему, поскольку Trident только совершает 1 партию за раз. Но это не масштабируемо. При настройке на любое значение, превышающее 1, кортежи той же категории, если они испускаются двумя последовательными партиями, обрабатываются до совершения предыдущей транзакции.

Или должен ли я иметь один носик для каждой категории и установить max_spout_pending на 1?

Благодаря

ответ

0

Я предлагаю вам заглянуть в реализации ITridentSpout. Он имеет метод success() в координаторе, который вызывается, когда пакет обрабатывается успешно. Те же метаданные от координатора отправляются всем эмиттерам, поэтому они должны будут разделить работу.

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