Окно шторма Apache, создающее дубликаты кортежей в случае истечения времени ожидания сообщения
Я использовал BaseWindowBolt из Apache Storm. Однако в случае истечения времени ожидания сообщения я вижу дубликаты пакетов. Например, ниже приведена моя тестовая конфигурация. Я использую носик Kafka для чтения данных из темы. У меня есть болт с размером окна 2 и временем ожидания сообщения 30.
теперь я создал 1 сообщение в тему и дождался истечения времени ожидания, а затем, когда я отладил код топологии, запустив топологию локально, я вижу, что один и тот же пакет приходит дважды в объект окна кортежа.
Это желаемое поведение или я делаю что-то не так? В идеале Storm должен обрабатывать только сообщение, поступившее в окно, если истекает тайм-аут, т.е. 1.
1 ответ
Я понял причину такого поведения. Это связано с тем, что истекло время ожидания сообщения, а последнее сообщение все еще не обработано, поэтому Storm посчитает, что сообщение не удалось, и повторит попытку, что приведет к тому, что тот же пакет будет включен в окно кортежа. Чтобы это исправить, мы можем либо увеличить таймаут сообщения в секунду, либо уменьшить количество окон.