Apache storm 确认/锚定风暴元组的正确方法

Apache storm 确认/锚定风暴元组的正确方法,apache-storm,Apache Storm,我有一个螺栓,在小批量的元组工作。我基本上有一个switch语句,它可以侦听来自前一个bolt的流或tick元组。它看起来像这样: switch(component) { bolt1: do some work... anchors.add(tuple) tick: do some work... collector.emit(anchors, value) collector.ack(tuple) anch

我有一个螺栓,在小批量的元组工作。我基本上有一个switch语句,它可以侦听来自前一个bolt的流或tick元组。它看起来像这样:

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.acktuple?尽管Storm UI计数很奇怪,但拓扑运行时没有任何元组超时。

如果要在工作进程崩溃时重播挂起的锚,则不应在bolt1情况下确认元组。您也不想多次确认元组


看起来你在确认勾号元组,而不是勾号案例中的锚?您也应该确认锚定,否则一旦您点击拓扑消息超时,喷口就会被告知失败。

我明白了,谢谢您提供的信息!你是说除了将锚点传递给emit方法之外,我还需要循环遍历锚点列表并逐个确认每个锚点吗?我的理解是,如果这一个之后的螺栓正确地确认,就没有必要在这里单独循环和确认。是的,你也必须确认锚。我想看一下这本书将有助于说明风暴是如何对你们起作用的。本质上,Storm跟踪喷口发出的每个元组的树/元组图。当螺栓发射元组时,将在元组图中创建一条新边,该元组图以喷口最初发射的元组为根。图中的所有边,例如,必须确认锚点,否则喷口发出的元组失败。明白了,谢谢!我以前对这个链接有过深入了解,但他们没有提到在多个锚的列表中循环。我将把它添加到我的代码中,看看有什么变化!