У нас есть приложение camel, которое читает сообщение от kafka с помощью компонента Camel kafka (версия 3.3). Наша конечная точка потребления Kafka имеет следующие свойства:
Когда наше приложение завершается и мы закрываем контекст Camel, мы видим в трассировке стека, что метод onPartitionRevoked () класса org. apache .camel.component.kafka.KafkaConsumer. В этом методе comitOffset вызывается с опцией forceCommit = true (см. https://github.com/apache/camel/blob/7f96e2e248cc52a8d3c5899e50bbfe71427c69d4/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaConsumer.java#L463)
В методе commitOffset () свойство allowManualCommit проверяется только тогда, когда локальный репозиторий смещения настроен на выполнение фиксации смещения или нет. Если локальный репозиторий смещения не настроен, свойство allowManualCommit не проверяется и вместо этого принудительно выполняется commitSyn c (см. https://github.com/apache/camel/blob/7f96e2e248cc52a8d3c5899e50bbfe71427c69d4/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaConsumer.java#L435)
Почему это различие и почему commitSyn c принудительно, когда мы не используем локальный репозиторий смещения, и мы хотим использовать ручную фиксацию и отключили функцию автоматической фиксации?