The new Kafka spout has a RetryService interface that should make logic around retrying tuples pluggable. The RetryServiceExponentialBackoff class has code for setting a max retry count, and dropping messages once they reach the retry limit. This functionality is duplicated by the spout in the fail method, which means that the user must set different maxRetries for the RetryService and the spout in order for the RetryService code to be hit when dropping messages.
I think the retry logic belongs in the RetryService interface, and should be removed from the spout. It would also be good if the RetryService could indicate if a message will be retried or not.