Greetings --
We've been using Storm to pull messages off a RabbitMQ queue for processing
in our topology. When we added the ack'ing to the spout we're using to pull
messages off the queue, we see some interesting behavior.
We have verified the following:
- Sending an anchor on emit from the spout (ala emit(new Values("message"),
new Ack(deliveryTag))
- Sending an ack at the end of the execute(Tuple) method in our bolt (only
one bolt type in the topology)
- Set max spout pending to a variety of settings from 1 to 200
- Max prefetch on our queue is set to 200
- Sending an acknowledgement to RabbitMQ in our ack method on the spout
Initially, we were seeing none of our messages ack (before setting the max
spout pending). Once we set the max spout pending, we started seeing acks,
but the spout still left messages unacknowledged on the queue (i.e. a final
"cleanup" ack wasn't being sent).
So, the questions I have are: does max spout pending need to be set for the
emit/ack/fail framework to work correctly? Is the behavior of the spout to
block until the number of tuples ack'ed reaches max spout pending?
Thanks for any help in advance.