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

sanghyeok An updated KAFKA-21229:
---------------------------------
    Labels:   (was: clients)

> AsyncKafkaConsumer passes null offsets to OffsetCommitCallback when an 
> asynchronous commit fails
> ------------------------------------------------------------------------------------------------
>
>                 Key: KAFKA-21229
>                 URL: https://issues.apache.org/jira/browse/KAFKA-21229
>             Project: Kafka
>          Issue Type: Bug
>          Components: clients, consumer
>            Reporter: sanghyeok An
>            Assignee: sanghyeok An
>            Priority: Major
>             Fix For: 4.5.0
>
>
> When an asynchronous commit fails in AsyncKafkaConsumer with 
> group.protocol=consumer, the user-provided OffsetCommitCallback receives null 
> instead of the offsets associated with the request.
> Both overloads are affected:
> {code:java}
> consumer.commitAsync(offsets, callback);
> consumer.commitAsync(callback);
> {code}
> Successful commits pass the request offsets correctly.
> *Expected behavior*
> The callback should receive the offsets and metadata associated with the 
> request, regardless of whether the commit succeeds or fails. The exception 
> argument should indicate the failure and its cause.
> This is consistent with the documentation for the offsets parameter of 
> OffsetCommitCallback.onComplete() and the behavior of the Classic Consumer.
>  
> *Actual behavior and impact*
> When an asynchronous commit fails, the callback is invoked as follows:
> {code:java}
> callback.onComplete(null, exception); {code}
> Applications cannot identify or log the offsets associated with the failed 
> request using the callback argument. Error-handling code that accesses the 
> offsets map may throw a NullPointerException.
> {code:java}
> consumer.commitAsync((offsets, exception) -> {
>     if (exception != null)
> {         offsets.forEach((partition, offset) ->             
> recordFailure(partition, offset, exception));     }
> }); {code}
> This issue concerns the information provided when reporting a failed commit. 
> It does not imply that the issue itself causes commit failures or data loss.
>  
> *Root cause*
> AsyncKafkaConsumer.commitAsync() forwards the committedOffsets value received 
> by the commit future’s whenComplete handler directly to the user callback.
> When the future completes exceptionally, committedOffsets` is `null`. The 
> implementation does not fall back to the explicitly supplied request offsets. 
> When offsets are omitted, the offsets calculated in the background are not 
> separately retained for the failure callback either.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to