我对Storm中的ack()
和fail()
方法感到困惑。
当我用元组发送id或者它们已经在Storm中实现时,我是否需要实现它们?
答案 0 :(得分:1)
强烈意义上不需要它。但是,如果您实现自己的可靠Spout,则需要实现两者:
首先,您需要存储在nextTuple()
可靠中发出的所有元组(及其ID),以便您可以在失败时重播它们!这是最困难的部分。将它们存储在内存中并不能保存,因为喷口可能会自行失效。此外,喷口可能会在另一台机器上重新启动。因此,您需要确保整个群集中都可以访问存储。
ack()
。该参数将是最初分配给元组的消息ID。因此,您可以从可靠存储中丢弃此元组。
fail()
时,都会调用<{collector.fail(...)
。同样,该参数将是最初分配给元组的消息ID。对于这种情况,您应该重放元组,将其发送到您在nextTuple()
中使用的同一个收集器。