Весенняя загрузка и обновление Kafka нарушили мои тесты

#spring #spring-boot #kotlin #spring-kafka #spring-kafka-test

#весна #весенняя загрузка #kotlin #spring-kafka #spring-kafka-test

Вопрос:

Я обновил библиотеки одного проекта, в частности, я обновил Spring Boot с версии 2.2.6 до 2.3.2.

Как упоминалось в документации по миграции, это также означало бы изменение моих зависимостей Kafka, переход к Spring Kafka и Kafka 2.5

Однако, после этого изменения, некоторые из моих тестов «случайным образом» завершаются неудачей, например, когда я выполняю все свои тесты, я сталкиваюсь с этим сбоем в некоторых из них (но не всегда в одних и тех же тестах):

 java.lang.IllegalStateException: More than one record for topic found
  

Исходя из этой конкретной строки:

 KafkaTestUtils.getSingleRecord(consumer, topicConfiguration.getTopic(event))
  

В документации нет упоминания о том, почему это происходит, и никакое другое сообщение об ошибке журнала, проливающее свет на то, почему это происходит. Поскольку я не изменил логику своего приложения, я что-то упустил при миграции?

Если я попробую что-то вроде этого:

 KafkaTestUtils.getRecords(consumer)
    .records(topicConfiguration.getTopic(event)).map { it }[0]
  

Чтобы получить только первый, тесты, которые работали ранее, завершились неудачей с IndexOutOfBoundsException из-за индекса.

Ответ №1:

Согласно тестовой документации библиотеки Spring Kafka, начиная с версии 2.5, они изменили способ настройки потребителей. Это точная цитата:

Начиная с версии 2.5, consumerProps метод устанавливает ConsumerConfig.AUTO_OFFSET_RESET_CONFIG значение earliest . Это потому, что в большинстве случаев вы хотите, чтобы потребитель использовал любые сообщения, отправленные в тестовом примере. По ConsumerConfig умолчанию установлено значение latest , что означает, что сообщения, уже отправленные тестом до запуска потребителя, не будут получать эти записи. Чтобы вернуться к предыдущему поведению, установите для свойства значение latest после вызова метода.

Это, скорее всего, может быть причиной описанных ошибок теста.

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

1. Приятно! Я рад слышать, что ответ был полезным.