[ 
https://issues.apache.org/jira/browse/KAFKA-1025?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14133944#comment-14133944
 ] 

Jason Rosenberg commented on KAFKA-1025:
----------------------------------------

Yes, I think if the new producer provides this info, that should be adequate 
(although I admit I have not looked at the new producer api too closely yet).

> 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
>              Labels: newbie
>             Fix For: 0.8.2
>
>         Attachments: KAFKA-1025.patch
>
>
> 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.3.4#6332)

Reply via email to