Интеграционные тесты с Apache Kafka

На самом деле существует проект EmbeddedKafka, но мы пойдём другим путём. Представьте, что вы подключили kafka-maven-plugin, ну или каким-нибудь другим способом запускаете Kafka для интеграционных тестов.

Скорее всего, у вас возникнет проблема с тем, что сообщения из kafka могут не приходить или приходить с опозданием.

Такая проблема возникает из-за того, что когда вы внутри интеграционного теста в метода с пометкой @Before  подключаете Consumer к какому-нибудь топику Kafka, то это запускает процесс переназначения партиций и consumer-ов для подключения нового consumer-а. И новый consumer не будет считывать из очереди сообщения до окончания этого процесса, который, кстати, происходит асинхронно.

Для того чтобы дождаться окончания переназначения партиций и consumer-ов нужно использовать метод:

 

Интеграционные тесты с Apache Kafka: 2 комментария

    1. Примера, к сожалению нет. В данном случае

      Имеется в виду, на сколько я помню, что внутри readFromKafka мы считываем все сообщения из самой кафка, какие есть, и кладём в kafkaRecords. В данном примере, возможно, readFromKafka случайно попал. Я уже не очень помню. Здесь был основной акцент на том, что нужно обязательно дождаться переназначения партиций, как это сделано в методе createKafkaConsumer.

      Метод readFromKafka при желании можно использовать, например, перед каждым запуском теста, чтобы сначала считать все сообщения, которые уже отправлены предыдущими тестами в Kafka, чтобы запуск этого теста был чистым. Для хорошего теста уж точно нужны не сообщения предыдущих тестов, а нужны только сообщения, которые были отправлены в Kafka в рамках этого теста.

      А ещё лучше, наверное, readFromKafka использовать по окончании теста, чтобы считать все сообщения, которые были отправлены в Kafka, и сравнить с тем, что должно было быть туда отправлено.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *