[ 
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)

Reply via email to