Github user srdo commented on the issue:
https://github.com/apache/storm/pull/2790
@uddhavarote That's not how it works. The stream you emit to doesn't
matter. As long as the tuple you emit from the KafkaBolt is anchored to the
input tuple, the tuple will be replayed from the spout and go to the entire
topology again if processing fails after the KafkaBolt.
Basically the choice you will have is to use`OutputCollector.emit(input,
new Values(...))`, in which case the tuple gets replayed from the spout if
processing fails in your bolt, or `(OutputCollector.emit(new Values(...))`, in
which case the tuple does not get replayed and is lost if processing fails in
your bolt.
That said, your application probably needs to deal with potential duplicate
writes to Kafka anyway, so it might not be a big deal. I'm fine with adding the
output collector and tuple to the callback. Please raise an issue at
https://issues.apache.org/jira and feel free to submit a PR here that makes the
change.
---