You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@storm.apache.org by Chen Wang <ch...@gmail.com> on 2014/07/24 03:13:47 UTC

storm reliablity

Guys,
i am a bit confused about the fault tolerance feature of storm. I have read
https://storm.incubator.apache.org/documentation/Guaranteeing-message-processing.html

My question is, if a bolt failed with some runtime exception, does it means
that the tuple is failed and the same tuple sent to this bolt will be
replayed again? Or it means that the message has been processed although it
failed. It already met the "at least one" processing, and will not be
replayed.
Or it depends on how and when I call .ack and .fail?

Also about replaying message if time out, does it mean that if a downstream
bolt takes more than the specified time out, the message will be replayed?
Or its again depending on when I call ack and fail..

Thanks for clarification.
Chen

Re: storm reliablity

Posted by Chen Wang <ch...@gmail.com>.
Got it. that clarifies. I thought the replay implementation is built in
already. Actually storm has replay capacity but whether my application will
replay or not entirely depends on my own implementation.  For example if my
spout extends BaseRichSpout, but doesn't override the fail() method,
nothing will be replayed since the fail() in BaseRichSpout does nothing. Is
my understanding correct?

Thanks much! Naresh!
Chen


On Wed, Jul 23, 2014 at 8:43 PM, Naresh Kosgi <na...@gmail.com> wrote:

> yes that is correct.
>
> Two quick points:
> 1.  If you are not going to use the fail method for some kind of reply
> then you probably should not anchor your tuples as storm runs a little bit
> faster if reply framework is not used.
> 2. The timeout setting is configurable so you can set it to be more then
> 30 seconds if your process takes more time.
>
>
> On Wed, Jul 23, 2014 at 10:46 PM, Chen Wang <ch...@gmail.com>
> wrote:
>
>> So if my downstream bolt is doing some time consuming task after
>> receiving a signal(tuple) from the spout. e.g:
>>
>>  public void execute(Tuple tuple) {
>>         String sentence = tuple.getString(0);
>>         while(){
>>
>>             // time consuming job
>>
>>         }
>>         _collector.ack(tuple);
>>     }
>>
>> if the while loop takes longer than the specified time(30s), then the storm will consider the signal failed and the .fail() will be called in the spout. Is that correct? Whether the tuple will be replayed or not entirely depends on my implementation in fail()?
>>
>> Another case, if I move _collector.ack(tuple); before the while loop, then the storm will consider the tuple at least succeeded already on this bolt? Even in while loop there is exception thrown, the fail() will not be called on spout. Is that right?
>>
>> Thanks,
>>
>> Chen
>>
>>
>>
>>
>>
>> On Wed, Jul 23, 2014 at 6:22 PM, Naresh Kosgi <na...@gmail.com>
>> wrote:
>>
>>> All reply's occur from the spout.  Think of what you emit from the spout
>>> as your root tuple and all other tuples generated from that tuple as child
>>> tuples. If any downstream tuples fail you can code to reemit the same tuple
>>> again from your spout and reply the entire set.  There is no way I know of
>>> to reply just the bolt tuples.
>>>
>>> When all downstream processing is complete the ack method in the spout
>>> is called by the storm framework and fail is called when one of the tuples
>>> downstream fails/timesout.  Storm provides you a framework to setup reply
>>> but it is you as a developer that needs to code for it.
>>>
>>> Hope this helps
>>>
>>>
>>> On Wed, Jul 23, 2014 at 9:13 PM, Chen Wang <ch...@gmail.com>
>>> wrote:
>>>
>>>> Guys,
>>>> i am a bit confused about the fault tolerance feature of storm. I have
>>>> read
>>>>
>>>> https://storm.incubator.apache.org/documentation/Guaranteeing-message-processing.html
>>>>
>>>> My question is, if a bolt failed with some runtime exception, does it
>>>> means that the tuple is failed and the same tuple sent to this bolt will be
>>>> replayed again? Or it means that the message has been processed although it
>>>> failed. It already met the "at least one" processing, and will not be
>>>> replayed.
>>>> Or it depends on how and when I call .ack and .fail?
>>>>
>>>> Also about replaying message if time out, does it mean that if a
>>>> downstream bolt takes more than the specified time out, the message will be
>>>> replayed? Or its again depending on when I call ack and fail..
>>>>
>>>> Thanks for clarification.
>>>> Chen
>>>>
>>>
>>>
>>
>

Re: storm reliablity

Posted by Naresh Kosgi <na...@gmail.com>.
yes that is correct.

Two quick points:
1.  If you are not going to use the fail method for some kind of reply then
you probably should not anchor your tuples as storm runs a little bit
faster if reply framework is not used.
2. The timeout setting is configurable so you can set it to be more then 30
seconds if your process takes more time.


On Wed, Jul 23, 2014 at 10:46 PM, Chen Wang <ch...@gmail.com>
wrote:

> So if my downstream bolt is doing some time consuming task after receiving
> a signal(tuple) from the spout. e.g:
>
>  public void execute(Tuple tuple) {
>         String sentence = tuple.getString(0);
>         while(){
>
>             // time consuming job
>
>         }
>         _collector.ack(tuple);
>     }
>
> if the while loop takes longer than the specified time(30s), then the storm will consider the signal failed and the .fail() will be called in the spout. Is that correct? Whether the tuple will be replayed or not entirely depends on my implementation in fail()?
>
> Another case, if I move _collector.ack(tuple); before the while loop, then the storm will consider the tuple at least succeeded already on this bolt? Even in while loop there is exception thrown, the fail() will not be called on spout. Is that right?
>
> Thanks,
>
> Chen
>
>
>
>
>
> On Wed, Jul 23, 2014 at 6:22 PM, Naresh Kosgi <na...@gmail.com>
> wrote:
>
>> All reply's occur from the spout.  Think of what you emit from the spout
>> as your root tuple and all other tuples generated from that tuple as child
>> tuples. If any downstream tuples fail you can code to reemit the same tuple
>> again from your spout and reply the entire set.  There is no way I know of
>> to reply just the bolt tuples.
>>
>> When all downstream processing is complete the ack method in the spout is
>> called by the storm framework and fail is called when one of the tuples
>> downstream fails/timesout.  Storm provides you a framework to setup reply
>> but it is you as a developer that needs to code for it.
>>
>> Hope this helps
>>
>>
>> On Wed, Jul 23, 2014 at 9:13 PM, Chen Wang <ch...@gmail.com>
>> wrote:
>>
>>> Guys,
>>> i am a bit confused about the fault tolerance feature of storm. I have
>>> read
>>>
>>> https://storm.incubator.apache.org/documentation/Guaranteeing-message-processing.html
>>>
>>> My question is, if a bolt failed with some runtime exception, does it
>>> means that the tuple is failed and the same tuple sent to this bolt will be
>>> replayed again? Or it means that the message has been processed although it
>>> failed. It already met the "at least one" processing, and will not be
>>> replayed.
>>> Or it depends on how and when I call .ack and .fail?
>>>
>>> Also about replaying message if time out, does it mean that if a
>>> downstream bolt takes more than the specified time out, the message will be
>>> replayed? Or its again depending on when I call ack and fail..
>>>
>>> Thanks for clarification.
>>> Chen
>>>
>>
>>
>

Re: storm reliablity

Posted by Chen Wang <ch...@gmail.com>.
So if my downstream bolt is doing some time consuming task after receiving
a signal(tuple) from the spout. e.g:

 public void execute(Tuple tuple) {
        String sentence = tuple.getString(0);
        while(){

            // time consuming job

        }
        _collector.ack(tuple);
    }

if the while loop takes longer than the specified time(30s), then the
storm will consider the signal failed and the .fail() will be called
in the spout. Is that correct? Whether the tuple will be replayed or
not entirely depends on my implementation in fail()?

Another case, if I move _collector.ack(tuple); before the while loop,
then the storm will consider the tuple at least succeeded already on
this bolt? Even in while loop there is exception thrown, the fail()
will not be called on spout. Is that right?

Thanks,

Chen





On Wed, Jul 23, 2014 at 6:22 PM, Naresh Kosgi <na...@gmail.com> wrote:

> All reply's occur from the spout.  Think of what you emit from the spout
> as your root tuple and all other tuples generated from that tuple as child
> tuples. If any downstream tuples fail you can code to reemit the same tuple
> again from your spout and reply the entire set.  There is no way I know of
> to reply just the bolt tuples.
>
> When all downstream processing is complete the ack method in the spout is
> called by the storm framework and fail is called when one of the tuples
> downstream fails/timesout.  Storm provides you a framework to setup reply
> but it is you as a developer that needs to code for it.
>
> Hope this helps
>
>
> On Wed, Jul 23, 2014 at 9:13 PM, Chen Wang <ch...@gmail.com>
> wrote:
>
>> Guys,
>> i am a bit confused about the fault tolerance feature of storm. I have
>> read
>>
>> https://storm.incubator.apache.org/documentation/Guaranteeing-message-processing.html
>>
>> My question is, if a bolt failed with some runtime exception, does it
>> means that the tuple is failed and the same tuple sent to this bolt will be
>> replayed again? Or it means that the message has been processed although it
>> failed. It already met the "at least one" processing, and will not be
>> replayed.
>> Or it depends on how and when I call .ack and .fail?
>>
>> Also about replaying message if time out, does it mean that if a
>> downstream bolt takes more than the specified time out, the message will be
>> replayed? Or its again depending on when I call ack and fail..
>>
>> Thanks for clarification.
>> Chen
>>
>
>

Re: storm reliablity

Posted by Naresh Kosgi <na...@gmail.com>.
All reply's occur from the spout.  Think of what you emit from the spout as
your root tuple and all other tuples generated from that tuple as child
tuples. If any downstream tuples fail you can code to reemit the same tuple
again from your spout and reply the entire set.  There is no way I know of
to reply just the bolt tuples.

When all downstream processing is complete the ack method in the spout is
called by the storm framework and fail is called when one of the tuples
downstream fails/timesout.  Storm provides you a framework to setup reply
but it is you as a developer that needs to code for it.

Hope this helps


On Wed, Jul 23, 2014 at 9:13 PM, Chen Wang <ch...@gmail.com>
wrote:

> Guys,
> i am a bit confused about the fault tolerance feature of storm. I have read
>
> https://storm.incubator.apache.org/documentation/Guaranteeing-message-processing.html
>
> My question is, if a bolt failed with some runtime exception, does it
> means that the tuple is failed and the same tuple sent to this bolt will be
> replayed again? Or it means that the message has been processed although it
> failed. It already met the "at least one" processing, and will not be
> replayed.
> Or it depends on how and when I call .ack and .fail?
>
> Also about replaying message if time out, does it mean that if a
> downstream bolt takes more than the specified time out, the message will be
> replayed? Or its again depending on when I call ack and fail..
>
> Thanks for clarification.
> Chen
>