Нужно ли нам самостоятельно удалять дубликаты хотя бы раз в случае доставки? - PullRequest
0 голосов
/ 21 июня 2019

Apache Storm и Samza гарантируют как минимум однократную доставку.Это означает, что в процессе вычислений могут быть некоторые дубликаты.Нужно ли нам перемещать дубликаты самостоятельно (включая удаление дублирующейся части в нашем коде)?Например, проблема с количеством слов.Если слово «мальчик» появляется только один раз, но есть 2 «мальчика» из-за некоторого сбоя или задержки.Шторм переиграл «Мальчик».Итак, результат «счетчик два»?Или Storm удалите дубликат для нас, результат один?

1 Ответ

0 голосов
/ 02 июля 2019

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

Идемпотентный потребительский паттерн - это то, на что вы должны смотреть.Хранение хэшей последних извлеченных событий, так что вы можете игнорировать их, если они случайно отправлены еще раз, например, это способ достичь этого (ConcurrentHashMap в памяти может сделать это или внешние кэши, такие как Redis, не забудьте исключить эти структуры, как только выуверен, что вы не рискуете получить событие снова).

...