You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by "Jun Rao (Jira)" <ji...@apache.org> on 2022/04/26 18:06:00 UTC

[jira] [Resolved] (KAFKA-13448) Kafka Producer Client Callback behaviour does not align with Javadoc

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