风暴是否需要实施ack和fail方法

时间:2015-08-05 14:57:36

标签: tuples apache-storm

我对Storm中的ack()fail()方法感到困惑。 当我用元组发送id或者它们已经在Storm中实现时,我是否需要实现它们?

1 个答案:

答案 0 :(得分:1)

强烈意义上不需要它。但是,如果您实现自己的可靠Spout,则需要实现两者:

首先,您需要存储在nextTuple() 可靠中发出的所有元组(及其ID),以便您可以在失败时重播它们!这是最困难的部分。将它们存储在内存中并不能保存,因为喷口可能会自行失效。此外,喷口可能会在另一台机器上重新启动。因此,您需要确保整个群集中都可以访问存储。

每次元组(及其所有"孩子"元组 - 记住锚定)被激活时,都会调用

ack()。该参数将是最初分配给元组的消息ID。因此,您可以从可靠存储中丢弃此元组。

每次元组(或其中一个&#34;子&#34;元组)超时或者螺栓明确调用fail()时,都会调用<{collector.fail(...)。同样,该参数将是最初分配给元组的消息ID。对于这种情况,您应该重放元组,将其发送到您在nextTuple()中使用的同一个收集器。