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

Does storm needs to implement ack and fail method or not

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

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

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

ack() 将在每次元组(及其所有 "child" 元组——记住锚定)被确认时被调用。该参数将是最初分配给元组的消息 ID。因此,您可以从 可靠的 存储中丢弃此元组。

每次元组(或其 "child" 元组之一)超时或螺栓显式调用 collector.fail(...) 时,都会调用

fail()。同样,该参数将是最初分配给元组的消息 ID。对于这种情况,您应该通过将元组发送到您在 nextTuple().

中使用的同一个收集器来重放元组