2016-11-16 3 views
0

Могу ли я осуществлять руководство Кафка компенсировано управление с Spring Облако пара следующим образом:Spring облако поток ручное управление смещением

  1. Всякий раз, когда мой потребитель обрабатывает сообщение, он совершает его смещение в БД. Не в Kafka
  2. Когда мои потребители перезагружаются, он считывает последнее обработанное смещение от БД, ищет это смещение и начинает обрабатывать следующие сообщения.

ответ

0

Spring Cloud Stream позволяет вам вручную распознавать сообщения в потребительском приложении. Не знаете, почему вы хотите сохранить смещение в БД (возможно, это ваша потребность). Но мне интересно, поможет ли ваш ручной режим ack ваш случай.

Вы можете использовать ручной режим ack, установив spring.cloud.stream.kafka.bindings.<inboundChannelName>.consumer.autoCommitOffset в false и вручную подтверждая сообщения только после того, как потребитель обработал сообщения. Вы можете найти пример here

+0

Проблема заключается в перезагрузке. Я хочу строго контролировать, где я начинаю, после того как потребитель перезагружен, чтобы иметь ровно один раз доставки. – Nikem

+0

При объединении режима ручного подтверждения и начиная с «последнего» смещения во время перезагрузки потребителя не помогает ли доставка «точно один раз»? –

+0

Основной проект spring-kafka (при использовании kafka 10) поддерживает это через механизм [поиск] (http://docs.spring.io/spring-kafka/docs/1.1.1.RELEASE/reference/html/_reference. html # seek), но Spring Cloud Stream в настоящее время не раскрывает его как функцию. –

Смежные вопросы