diff --git a/clients/src/main/java/org/apache/kafka/clients/consumer/AcknowledgementCommitCallback.java b/clients/src/main/java/org/apache/kafka/clients/consumer/AcknowledgementCommitCallback.java
index f37fbe05750..c84f9c78d0d 100644
--- a/clients/src/main/java/org/apache/kafka/clients/consumer/AcknowledgementCommitCallback.java
+++ b/clients/src/main/java/org/apache/kafka/clients/consumer/AcknowledgementCommitCallback.java
@@ -20,8 +20,10 @@ import org.apache.kafka.common.KafkaException;
import org.apache.kafka.common.TopicIdPartition;
import org.apache.kafka.common.annotation.InterfaceStability;
import org.apache.kafka.common.errors.AuthorizationException;
+import org.apache.kafka.common.errors.DisconnectException;
import org.apache.kafka.common.errors.InterruptException;
import org.apache.kafka.common.errors.InvalidRecordStateException;
+import org.apache.kafka.common.errors.NotLeaderOrFollowerException;
import org.apache.kafka.common.errors.WakeupException;
import java.util.Map;
@@ -42,12 +44,16 @@ public interface AcknowledgementCommitCallback {
*
* @param exception The exception thrown during processing of the request, or null if the acknowledgement completed successfully.
*
+ * - {@link AuthorizationException} if not authorized to the topic or group
*
- {@link InvalidRecordStateException} if the record state is invalid
- *
- {@link AuthorizationException} if not authorized to the topic of group
+ *
- {@link NotLeaderOrFollowerException} if the leader had changed by the time the acknowledgements were sent
+ *
- {@link DisconnectException} if the broker disconnected before the request could be completed
*
- {@link WakeupException} if {@link KafkaShareConsumer#wakeup()} is called before or while this function is called
*
- {@link InterruptException} if the calling thread is interrupted before or while this function is called
*
- {@link KafkaException} for any other unrecoverable errors
*
+ * Note that even if the exception is a retriable exception, the acknowledgement could not be completed and the
+ * records need to be fetched again. The callback is called after any retries have been performed.
*/
void onComplete(Map> offsets, Exception exception);
}
diff --git a/clients/src/main/java/org/apache/kafka/clients/consumer/internals/AcknowledgementCommitCallbackHandler.java b/clients/src/main/java/org/apache/kafka/clients/consumer/internals/AcknowledgementCommitCallbackHandler.java
index 794be0a67b3..b746e1a2135 100644
--- a/clients/src/main/java/org/apache/kafka/clients/consumer/internals/AcknowledgementCommitCallbackHandler.java
+++ b/clients/src/main/java/org/apache/kafka/clients/consumer/internals/AcknowledgementCommitCallbackHandler.java
@@ -17,6 +17,7 @@
package org.apache.kafka.clients.consumer.internals;
import org.apache.kafka.clients.consumer.AcknowledgementCommitCallback;
+import org.apache.kafka.common.KafkaException;
import org.apache.kafka.common.TopicIdPartition;
import org.slf4j.Logger;
@@ -45,10 +46,7 @@ public class AcknowledgementCommitCallbackHandler {
void onComplete(List