gpt4 book ai didi

apache-storm - 停止处理某些 bolt 中的元组

转载 作者:行者123 更新时间:2023-12-04 17:09:40 24 4
gpt4 key购买 nike

我有一个拓扑,例如由 1 个喷口和 4 个 bolt 组成

spout A -> bolt B -> bolt C -> bolt E
-> bolt D

只有当bolt B 中的某个条件语句为真时,它才会将一个元组传递给bolt C 和bolt D。

只有当bolt C中的某个条件语句为真时,它才会将一个元组传递给bolt E。

所以单元组可能只能到达 bolt B 或( bolt C 和 D)。

我正在使用 BaseBasicBolt,据我所知,它会在调用 collect.emit 后自动确认。

例如bolt B中的execute方法如下
public class boltB extends BaseBasicBolt {
public void execute(Tuple tuple, BasicOutputCollector collector) {
...some logic goes here
if (response.getCount() > 0) {
collector.emit(new Values(tuple.getString(0)));
}
}
}

因此,如果不调用collector.emit,我认为来自spout 的元组失败了,因为我从storm ui 中看到几乎所有来自spout 的元组都失败了。

在这种情况下,我应该在哪里调用 'ack' 以使 spout 不将其视为失败的元组?

最佳答案

您正在做的事情对于您正在实现的逻辑是正确的。您不需要显式调用 ack() .使用时 BaseBasicBolt , 每个元组都在 execute() 之后确认方法来自 BasicBoltExecutor .对于失败的元组,您应该检查异常。还可以尝试查看 Storm UI,了解每个 spout 和 bolt 的元组发出/执行/失败的异常情况。

关于apache-storm - 停止处理某些 bolt 中的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24256117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com