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