Как микросервисы общаются между собой: через REST или Kafka
Что проверяют
Для тестировщика вопрос не про выбор архитектуры, а про то, понимаете ли вы разницу синхронного и асинхронного взаимодействия и как из-за неё меняется тестирование. Следом обычно спрашивают: «Как вы проверите, что сервис действительно отправил событие в Kafka?»
Как отвечать
Правильный ответ: и так, и так, а часто ещё и через gRPC. Дальше разница, важная для тестов:
- REST: синхронный запрос по HTTP. Вызывающий сервис ждёт ответ и сразу знает результат: код ответа, тело или таймаут. Подходит, когда ответ нужен прямо сейчас, например проверить остаток перед оплатой;
- Kafka: асинхронная передача событий через топики. Продюсер записал сообщение и пошёл дальше, консьюмеры читают его в своём темпе. Подходит, когда одно событие нужно нескольким сервисам или важно развязать их по нагрузке.
REST проверяют запросом и ответом: Postman, REST Assured, для изоляции зависимостей WireMock, для совместимости сервисов контрактные тесты вроде Pact. С Kafka проверок больше:
- само событие: прочитать топик через
kafka-console-consumerили веб-интерфейс вроде Kafka UI или AKHQ, сверить ключ, заголовки и схему сообщения; - итоговая согласованность: результат появляется не сразу, поэтому в автотестах ждут условия с таймаутом (в Java для этого есть Awaitility), а не ставят
sleepна пять секунд; - дубли: типичная гарантия доставки «хотя бы один раз», значит сообщение может прийти дважды. Проверьте, что повторная обработка не создаёт второй заказ;
- порядок: он гарантирован только внутри одной партиции;
- сбои: что происходит с битым сообщением, уходит ли оно в DLQ, растёт ли лаг консьюмера.
Для интеграционных тестов удобен Testcontainers с настоящим брокером в контейнере.
Где спотыкаются
Отвечают «Kafka быстрее REST». Это разные модели взаимодействия, а не соревнование в скорости.
Проверяют асинхронный сценарий как синхронный: отправили запрос и сразу смотрят в базу. Тест становится нестабильным, а причину ищут в коде сервиса.
Забывают про негативные сценарии очереди: дубли, нарушение порядка, недоступный брокер, сообщение с неверной схемой.