[
https://issues.apache.org/jira/browse/CAMEL-19972?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17844253#comment-17844253
]
Claus Ibsen commented on CAMEL-19972:
-------------------------------------
Can you try with latest 4.4.x or newer releases as we have improved kafka since
this was reported
> camel-kafka manual commit configuration inconsistency
> -----------------------------------------------------
>
> Key: CAMEL-19972
> URL: https://issues.apache.org/jira/browse/CAMEL-19972
> Project: Camel
> Issue Type: Bug
> Components: camel-kafka
> Affects Versions: 3.18.5, 3.21.1
> Reporter: Sami Peltola
> Priority: Minor
> Labels: help-wanted
>
> h2. Expected behavior
> * Should not matter if manual commits are enabled component level or
> endpoint level, consumer should not commit automatically when
> autoCommitEnable is set to false
> h2. Actual behavior
> The behavior for manual commits is inconsistent at the moment (Test on Camel
> versions 3.18.5 and 3.21.1), depending on whether the KafkaComponent is
> configured on component or endpoint level
> * If configured on component level, will still automatically commit offsets
> back to broker (after records from a partition have been processed)
> * If configured on endpoint level, will never automatically commit offsets
> * autoCommitEnable is
> h3. Configuration of manual commit for Kafka client during startup
> During startup for Kafka component, Camel context will go through the
> following classes and methods while setting up manual commit configuration.
> h4. KafkaComponent
> [https://github.com/apache/camel/blob/camel-3.18.5/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaComponent.java#L222]
> *Class:* org.apache.camel.component.kafka.KafkaComponent
> *Method:* doInit
>
> * When the component is being initialized, will check if
> configuration.isAllowManualCommit() is true AND kafkaManualCommitFactory is
> null
> ** If they are, will initialize kafkaManualCommitFactory as
> DefaultKafkaManualCommitFactory
> ** If not, will leave kafkaManualCommitFactory as null
>
> h4. CommitManagers
> [https://github.com/apache/camel/blob/camel-3.18.5/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/consumer/CommitManagers.java#L32]
> *Class:* org.apache.camel.component.kafka.consumer.CommitManagers
> *Method:* createCommitManager
> * Called when initializing Consumer
> ** For clarity's sake, omitting Async-related logic
> ** If configuration.isAllowManualCommit() is true AND manualCommitFactory is
> instance of DefaultKafkaManualCommitFactory
> *** Will initialize SyncCommitManager
> *** Otherwise, will initialize NoopCommitManager
> h4. Summary
> * Configuring manual commits on component level still results in automatic
> commits when the changing partitions (or all records processed) since
> *SyncCommitManager* is configured
> ** allowManualCommit is true when calling *doInit* -> initializes
> kafkaManualCommitFactory as DefaultKafkaManualCommitFactory -> initilize
> commitManager as SyncCommitManager
> * If allowManualCommit is only configured on endpoint level, it will be
> false when invoking {*}doInit{*}, therefore leaving kafkaManualCommitFactory
> as null, resulting in NoopCommitManager in *createCommitManager*
>
> h2. Workaround
> * Configure manual commits on endpoint level
--
This message was sent by Atlassian Jira
(v8.20.10#820010)