storm是否需要实现ack和fail方法

vfhzx4xs  于 2021-06-21  发布在  Storm
关注(0)|答案(1)|浏览(416)

我被搞糊涂了 ack() 以及 fail() 风暴中的方法。当我用元组发送id时需要实现它们吗?或者它们已经在storm中实现了吗?

nlejzf6q

nlejzf6q1#

从强烈的意义上说,这不是必需的。但是,如果您实现了自己的可靠喷口,则需要同时实现这两个功能:
首先,您需要存储在中发出的所有元组(及其ID) nextTuple() 可靠的,这样你就可以重播他们的失败!这是最困难的部分。将它们存储在内存中并不意味着保存,因为喷口可能会自行失效。此外,喷口可能会在另一台机器上重新启动。因此,您需要确保存储在整个集群中是可访问的。 ack() 将在每次一个元组(及其所有“子”元组——记住锚定)被ack时调用。参数将是最初分配给元组的消息id。因此,您可以从可靠的存储中丢弃这个元组。 fail() 将在每次元组(或其“子”元组之一)超时或bolt显式调用时调用 collector.fail(...) . 同样,参数将是最初分配给元组的消息id。对于这种情况,应该重放元组,方法是将元组发送到在中使用的同一收集器 nextTuple() .

相关问题