Например, у меня есть топология, состоящая из 1 носика и 4 болтов.
spout A -> bolt B -> bolt C -> bolt E
-> bolt D
Только если какой-то условный оператор в болте B истинен, он передает кортеж болтам C и болтам D.
И только если какое-то условное выражение в болте C истинно, то он передает кортеж в болт E.
Таким образом, одиночный кортеж может достигать только болта B или (болта C и D).
Я использую BaseBasicBolt, который, насколько мне известно, автоматически срабатывает после вызова collect.emit.
Например, метод выполнения в болте B показан ниже.
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)));
}
}
}
Поэтому, если не вызывается collect.emit, я думаю, что кортеж из носика не выполнен, потому что я вижу из пользовательского интерфейса storm, что почти все кортежи из носика не выполнены.
В этом случае, где я должен вызвать 'ack', чтобы носик не считал его неудачным кортежем?