[ https://issues.apache.org/jira/browse/KAFKA-1025?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13865458#comment-13865458 ]
Joe Stein commented on KAFKA-1025: ---------------------------------- Hi Jason, I have a developer on the bench for a few days starting tomorrow that can take a look at this. Its a good chance for him to dive into the internals more so I should be able to get him started on it. > Producer.send should provide recoverability info on failiure > ------------------------------------------------------------ > > Key: KAFKA-1025 > URL: https://issues.apache.org/jira/browse/KAFKA-1025 > Project: Kafka > Issue Type: Bug > Affects Versions: 0.8.0 > Reporter: Jason Rosenberg > > Currently, in 0.8, the Producer.send() method either succeeds, or fails by > throwing an Exception. > There are several exceptions that can be thrown, including: > FailedToSendException > QueueFullException > ClassCastExeption > These are all sub-classes of RuntimeException. > Under the covers, the producer will retry sending messages up to a maximum > number of times (according to the message.send.max.retries property). > Internally, the producer may decide which sorts of failures are recoverable, > and will retry those. Alternatively (via an upcoming change, see KAFKA-998), > it may decide to not retry at all, if the error is not recoverable. > The problem is, if FailedToSendException is returned, the caller to > Producer.send doesn't have a way to decide if a send failed due to an > unrecoverable error, or failed after exhausting a maximum number of retries. > A caller may want to decide to retry more times, perhaps after waiting a > while. But it should know first whether it's even likely that the failure is > retryable. > An example of this might be a if the message size is too large (represented > internally as a MessageSizeTooLargeException). In this case, it is not > recoverable, but it is still wrapped as a FailedToSendException, and should > not be retried. > So the suggestion is to make clear in the api javadoc (or scaladoc) for > Producer.send, the set of exception types that can be thrown (so that we > don't have to search through source code to find them). And add exception > types, or perhaps fields within FailedToSendException, so that it's possible > to reason about whether retrying might make sense. > Currently, in addition, I've found that Producer.send can throw a > QueueFullException in async mode (this should be a retryable exception, after > time has elapsed, etc.), and also a ClassCastException, if there's a > misconfiguration between the configured Encoder and the message data type. I > suspect there are other RuntimeExceptions that can also be thrown (e.g. > NullPointerException if the message/topic are null). -- This message was sent by Atlassian JIRA (v6.1.5#6160)