Не удалось установить для autoCommitOffset значение true с использованием облачных потоков kafka

#spring-boot #apache-kafka #kafka-consumer-api #apache-kafka-streams #spring-cloud-stream

#весенняя загрузка #apache-kafka #kafka-consumer-api #apache-kafka-streams #spring-cloud-stream

Вопрос:

Я использую spring-cloud-starter-stream-kafka — 1.3.3 и spring-cloud-stream с Spring Boot для подключения к Kafka, которые включают типичный вариант использования подписчика Publisher, в котором я хочу, чтобы значение enable.auto.commit было истинным.

Когда служба запускается, я вижу, что на консоли печатается несколько свойств Kafka (ИНФОРМАЦИОННЫЕ журналы), в которых перечислены все примененные свойства. Я вижу значение этого свойства как false- enable.auto.commit = false, как показано ниже:

 auto.commit.interval.ms = 100
enable.auto.commit = false
auto.offset.reset = earliest
check.crcs = true
client.id = consumer-2
connections.max.idle.ms = 540000
    exclude.internal.topics = true
fetch.max.bytes = 52428800
fetch.max.wait.ms = 500
fetch.min.bytes = 1
group.id = conn-dr-group
heartbeat.interval.ms = 3000
  

Я читал в Spring Doc, что если мы не предоставляем свойство автоматической фиксации, по умолчанию для него установлено значение true —

https://docs.spring.io/autorepo/docs/spring-cloud-stream-binder-kafka-docs/1.1.0.M1/reference/htmlsingle/

Однако при загрузке службы значение по-прежнему отображается как false.

Я попытался предоставить следующее свойство в application.properties, но все равно оно принимает значение false.

spring.cloud.stream.kafka.bindings.input.autoCommitOffset= true

Кто-нибудь знает, как мы можем получить значение true?

Ответ №1:

spring.cloud.stream.kafka.bindings.input.autoCommitOffset= true

Это другое свойство; оно сообщает связующему зафиксировать смещение после нормального возврата прослушивателя. Это более детерминировано, чем заставить клиента выполнять коммиты самостоятельно.

Связующее всегда сбрасывается enable.auto.commit ; вы можете переопределить это с помощью ...binder.configuration свойства, но это не рекомендуется.

Комментарии:

1. Спасибо, теперь я мог переопределить свойство как — spring.cloud.stream.kafka.bindings.input.configuration.autoCommitOffset= true.

2. Не могли бы вы, пожалуйста, рассказать мне, почему не рекомендуется переопределять это свойство, пожалуйста?

3. >If true the consumer's offset will be periodically committed in the background. IMO, лучше зафиксировать смещение более детерминированным способом — после успешной обработки записи.