Как справиться с блокировкой в storm с несколькими болтами, считываемыми из одного носика

#apache-storm

#apache-storm

Вопрос:

Моя топология выглядит так :

Data_Enrichment_Persistence_Topology

Итак, в основном проблема, которую я пытаюсь решить здесь, заключается в том, что каждый раз, когда возникает какая-либо проблема с болтами Stop или Load service, и кортеж терпит неудачу, он воспроизводится, и носик повторно выдает его. Это заставляет Cassandra bolt повторно обрабатывать кортеж и переписывать данные.

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

Я использую KafkaSpout для передачи данных (он передает их в поток «по умолчанию»). Не уверен, как дублировать потоки на уровне излучения носика Кафки.

Если я смогу дублировать потоки, воспроизведение в любом из двух будет повторно передавать сообщение только в определенном потоке прямо на уровне носика, оставляя другой поток нетронутым, верно?

ТИА!

Ответ №1:

Вам нужно использовать два выходных потока в вашем носике — по одному для каждого нисходящего прохода. Кроме того, вы отправляете каждый кортеж в оба потока (используя разные идентификаторы сообщений).

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

Комментарии:

1. Да, но если мы используем KafkaSpout, у нас нет контроля на этом уровне

2. Вы могли бы настроить KafkaSpout … (в этом прелесть open source) Может быть, не самый простой способ, но у меня нет другой идеи.