-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Open
Description
In what version(s) of Spring for Apache Kafka are you seeing this issue?
4.0.4
Describe the bug
The documentation states there are two ways to enable explicit acknowledgment in shared groups in Spring Kafka:
- Option 1 is working
props.put(ConsumerConfig.SHARE_ACKNOWLEDGEMENT_MODE_CONFIG, "explicit");. - Option 2: is not working
factory.getContainerProperties().setExplicitShareAcknowledgment(true);
To Reproduce
Steps to reproduce the behavior.
- Start the application
./mvnw spring-boot:run -Dspring-boot.run.profiles=explicit- Publish a valid message to the topic
curl -X POST "http://localhost:8080/produce?message=Hi"- Observe the logs, the setting on the
ShareConsumerConfigshow we are still usingimplicitacknowledgment mode
2026-03-26T11:05:46.702+01:00 INFO 55104 --- [ main] o.a.kafka.common.config.AbstractConfig : ShareConsumerConfig values:
share.acknowledgement.mode = implicit
- Observe the logs, we can't acknowledge the message we cause we are in
implicitacknowledgment mode. Resulting in this exception in our Spring Kafka consumer:
2026-03-26T11:06:02.761+01:00 ERROR 55104 --- [Container#0-C-1] s.k.l.ShareKafkaMessageListenerContainer : Failed to process queued acknowledgment for record: ConsumerRecord(topic = high-throughput-topic, partition = 0, leaderEpoch = 0, offset = 2, CreateTime = 1774519562719, deliveryCount = 1, serialized key size = -1, serialized value size = 2, headers = RecordHeaders(headers = [], isReadOnly = false), key = null, value = Hi)
java.lang.IllegalStateException: Implicit acknowledgement of delivery is being used.
at org.apache.kafka.clients.consumer.internals.ShareConsumerImpl.ensureExplicitAcknowledgement(ShareConsumerImpl.java:1060) ~[kafka-clients-4.1.2.jar:na]
at org.apache.kafka.clients.consumer.internals.ShareConsumerImpl.acknowledge(ShareConsumerImpl.java:688) ~[kafka-clients-4.1.2.jar:na]
at org.apache.kafka.clients.consumer.KafkaShareConsumer.acknowledge(KafkaShareConsumer.java:507) ~[kafka-clients-4.1.2.jar:na]
at org.springframework.kafka.listener.ShareKafkaMessageListenerContainer$ShareListenerConsumer.processQueuedAcknowledgments(ShareKafkaMessageListenerContainer.java:489) ~[spring-kafka-4.0.4.jar:4.0.4]
at org.springframework.kafka.listener.ShareKafkaMessageListenerContainer$ShareListenerConsumer.run(ShareKafkaMessageListenerContainer.java:344) ~[spring-kafka-4.0.4.jar:4.0.4]
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1825) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:1474) ~[na:na]
Expected behavior
When applying option 2 as described in the documentation, the ShareConsumerConfig should show we are using explicit acknowledgment mode, and we should be able to acknowledge messages in our Spring Kafka consumer.
Sample
We create a minimal reproducible example see: spring-kafka-share-groups-kip-932-poc
Reactions are currently unavailable