This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 179a5872fd0c CAMEL-23994: Fix batching manual async commit never 
reaching Kafka
179a5872fd0c is described below

commit 179a5872fd0c4a03900a097c01e8d090d7336e69
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue Jul 14 18:14:11 2026 +0200

    CAMEL-23994: Fix batching manual async commit never reaching Kafka
    
    In batching mode with manual async commit, calling manual.commit()
    only recorded the offset in OffsetCache via recordOffset() but the
    cache was never flushed to Kafka because the batching facade never
    called commitManager.commit(partition).
    
    Now the batching facade flushes recorded offsets for each partition
    after processExchange(), mirroring how the streaming facade works.
    
    Closes #24686
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../support/batching/KafkaRecordBatchingProcessorFacade.java     | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git 
a/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/consumer/support/batching/KafkaRecordBatchingProcessorFacade.java
 
b/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/consumer/support/batching/KafkaRecordBatchingProcessorFacade.java
index 06745b3506fc..fa26eff2466d 100644
--- 
a/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/consumer/support/batching/KafkaRecordBatchingProcessorFacade.java
+++ 
b/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/consumer/support/batching/KafkaRecordBatchingProcessorFacade.java
@@ -52,7 +52,14 @@ public class KafkaRecordBatchingProcessorFacade extends 
AbstractKafkaRecordProce
         logRecords(allRecords);
         Set<TopicPartition> partitions = allRecords.partitions();
         LOG.debug("Poll received records on {} partitions", partitions.size());
-        return kafkaRecordProcessor.processExchange(camelKafkaConsumer, 
allRecords);
+        ProcessingResult result = 
kafkaRecordProcessor.processExchange(camelKafkaConsumer, allRecords);
+
+        // Flush any manually recorded offsets to Kafka for each partition
+        for (TopicPartition partition : partitions) {
+            commitManager.commit(partition);
+        }
+
+        return result;
     }
 
 }

Reply via email to