[ 
https://issues.apache.org/jira/browse/KAFKA-13448?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jun Rao resolved KAFKA-13448.
-----------------------------
    Fix Version/s: 3.2.0
         Assignee: Philip Nee
       Resolution: Fixed

merged [https://github.com/apache/kafka/pull/11689] and a followup fix 
[https://github.com/apache/kafka/pull/12064] to trunk and 3.2 branch.

> Kafka Producer Client Callback behaviour does not align with Javadoc
> --------------------------------------------------------------------
>
>                 Key: KAFKA-13448
>                 URL: https://issues.apache.org/jira/browse/KAFKA-13448
>             Project: Kafka
>          Issue Type: Bug
>          Components: clients
>    Affects Versions: 1.1.0
>            Reporter: Seamus O Ceanainn
>            Assignee: Philip Nee
>            Priority: Minor
>             Fix For: 3.2.0
>
>
> In PR [#4188|https://github.com/apache/kafka/pull/4188] as part of 
> KAFKA-6180, a breaking change was accidentally introduced in the behaviour of 
> Callbacks for the producer client.
> Previously, whenever an exception was thrown when producing an event, the 
> value for 'metadata' passed to the Callback.onCompletion method was always 
> null. In PR [#4188|https://github.com/apache/kafka/pull/4188], in one part of 
> the code where Callback.onCompletion is called, the behaviour was changed so 
> that instead of passing a null value for metadata, a 'placeholder' value was 
> provided instead (see 
> [here|https://github.com/apache/kafka/pull/4188/files#diff-42d8f5166459ee28f201ff9cec0080fc7845544a0089ac9e8f3e16864cc1193eR1196]
>  and 
> [here|https://github.com/apache/kafka/pull/4188/files#diff-42d8f5166459ee28f201ff9cec0080fc7845544a0089ac9e8f3e16864cc1193eR1199]).
>   This placeholder contained only topic and partition information, and with 
> all other fields set to '-1'.
> This change only impacted a subset of exceptions, so that in the case of 
> ApiExceptions metadata would still be null (see 
> [here|https://github.com/apache/kafka/commit/aa42a11dfd99ee9ab24d2e9a7521ef1c97ae1ff4#diff-42d8f5166459ee28f201ff9cec0080fc7845544a0089ac9e8f3e16864cc1193eR843]),
>  but for all other exceptions the placeholder value would be used. The 
> behaviour at the time of writing remains the same.
> This issue was first reported in KAFKA-7412 when a user first noticed the 
> difference between the documented behaviour of Callback.onCompletion and the 
> implemented behaviour.
> At the time it was assumed that the behaviour when errors occur was to always 
> provide a placeholder metadata value to Callback.onCompletion, and the 
> documentation was updated at that time to reflect this assumption in [PR 
> #5798|https://github.com/apache/kafka/pull/5798]. The documentation now 
> states that when an exception occurs that the method will be called with an 
> empty metadata value (see 
> [here|https://github.com/apache/kafka/blob/3.1/clients/src/main/java/org/apache/kafka/clients/producer/Callback.java#L30-L31]).
>  However, there is still one case where Callback.onCompletion is called with 
> a null value for metadata (see 
> [here|https://github.com/apache/kafka/blob/3.1/clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java#L1002]),
>  so there is still a discrepancy between the documented behaviour and the 
> implementation of Callback.onCompletion.



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to