ack/anchor Storm 元组的正确方法
Proper way to ack/anchor Storm tuples
我有一个用于小批量元组的螺栓。我基本上有一个 switch
语句,用于侦听来自前一个螺栓的流或 tick tuple
。它看起来像这样:
switch(component) {
bolt1:
do some work...
anchors.add(tuple)
tick:
do some work...
collector.emit(anchors, value)
collector.ack(tuple)
anchors.clear()
当我 运行 这样做时,Storm UI 显示从这个螺栓确认的元组数量非常少。这是锚定它们的正确方法还是我还需要在 bolt switch 语句中调用 collector.ack(tuple)
?尽管 Storm UI 计数很奇怪,但拓扑是 运行ning,没有任何元组超时。
如果你想在 worker 崩溃时重播挂起的锚点,你不应该确认 bolt1 案例中的元组。你也永远不想多次确认元组。
看起来你在确认 tick 元组而不是 tick 案例中的锚点?你也应该确认锚点,否则一旦你达到拓扑消息超时,喷口就会被告知它们已经失败。
我有一个用于小批量元组的螺栓。我基本上有一个 switch
语句,用于侦听来自前一个螺栓的流或 tick tuple
。它看起来像这样:
switch(component) {
bolt1:
do some work...
anchors.add(tuple)
tick:
do some work...
collector.emit(anchors, value)
collector.ack(tuple)
anchors.clear()
当我 运行 这样做时,Storm UI 显示从这个螺栓确认的元组数量非常少。这是锚定它们的正确方法还是我还需要在 bolt switch 语句中调用 collector.ack(tuple)
?尽管 Storm UI 计数很奇怪,但拓扑是 运行ning,没有任何元组超时。
如果你想在 worker 崩溃时重播挂起的锚点,你不应该确认 bolt1 案例中的元组。你也永远不想多次确认元组。
看起来你在确认 tick 元组而不是 tick 案例中的锚点?你也应该确认锚点,否则一旦你达到拓扑消息超时,喷口就会被告知它们已经失败。