В документации Storm упоминается, что Storm воспроизводит кортеж, время обработки которого истекло. Мой вопрос заключается в том, делает ли шторм это автоматически (без вызова fail() в исходном потоке) или это скорее ответственность исходного потока за воспроизведение кортежа (вызывается fail(), и воспроизведение должно быть реализовано внутри или даже где-то снаружи) )?
Воспроизводит ли storm кортеж, время обработки которого истекло?
Ответы (2)
Чтобы правильно воспроизвести тайм-аут, вы должны привязать кортеж к идентификатору, когда вы выпускаете его из носика. По истечении времени ожидания все, что вы использовали в качестве привязки, возвращается методу отказа (fail(object anchorId)). Теперь вы можете использовать anchorId кортежа с ошибкой/тайм-аутом для повторного воспроизведения или чего-либо еще, что вы хотите сделать с кортежем тайм-аута. Каждый идентификатор привязки должен быть уникальным. Примером идентификатора привязки является идентификатор базы данных. В случае сбоя кортежа вы можете использовать идентификатор базы данных для воссоздания кортежа и его повторной отправки. Итак, чтобы ответить на ваш вопрос, у вас должна быть логика воспроизведения внутри сбоя, и вы можете использовать anchorId для воссоздания своего кортежа. Надеюсь, эта информация поможет
Из http://storm.apache.org/documentation/Guaranteeing-message-processing. HTMLа>,
если время ожидания кортежа истекло, Storm вызовет метод
fail
дляSpout
Так что да, fail
будет называться.