#apache-storm
#apache-storm
Вопрос:
Моя топология выглядит так :
Data_Enrichment_Persistence_Topology
Итак, в основном проблема, которую я пытаюсь решить здесь, заключается в том, что каждый раз, когда возникает какая-либо проблема с болтами Stop или Load service, и кортеж терпит неудачу, он воспроизводится, и носик повторно выдает его. Это заставляет Cassandra bolt повторно обрабатывать кортеж и переписывать данные.
Я не могу оставить кортежи в болтах загрузки и остановки без привязки, поскольку мне нужно, чтобы они были воспроизведены в случае какого-либо сбоя. Однако я хочу воспроизвести только верхний рабочий процесс.
Я использую KafkaSpout для передачи данных (он передает их в поток «по умолчанию»). Не уверен, как дублировать потоки на уровне излучения носика Кафки.
Если я смогу дублировать потоки, воспроизведение в любом из двух будет повторно передавать сообщение только в определенном потоке прямо на уровне носика, оставляя другой поток нетронутым, верно?
ТИА!
Ответ №1:
Вам нужно использовать два выходных потока в вашем носике — по одному для каждого нисходящего прохода. Кроме того, вы отправляете каждый кортеж в оба потока (используя разные идентификаторы сообщений).
Таким образом, в случае сбоя одного из них вы можете ответить на этот кортеж только этому потоку.
Комментарии:
1. Да, но если мы используем KafkaSpout, у нас нет контроля на этом уровне
2. Вы могли бы настроить KafkaSpout … (в этом прелесть open source) Может быть, не самый простой способ, но у меня нет другой идеи.