Разбор основ Apache Kafka, её применения в автотестах и топ-вопросов на собеседовании для QA Automation Engineer.
Аналогия: Представь себе умную ленту конвейера на заводе.
Главные термины (must know):
user-registered).В микросервисной архитектуре сервисы общаются асинхронно.
Пример из жизни:
1. Пользователь нажимает "Зарегистрироваться" (UI/API тест).
2. Сервис А пишет в БД и кидает событие в Kafka: UserCreated.
3. Сервис Б читает Kafka и отправляет Welcome-письмо.
4. Сервис В читает Kafka и начисляет бонусные баллы.
Как ты это тестируешь:
Ты не можешь просто сделать GET-запрос и проверить ответ. Тебе нужно:
1. Создать тестовые данные (отправить запрос).
2. Подписаться на топик в Kafka и "выловить" оттуда нужное сообщение.
3. Проверить (assert), что в сообщении верный user_id, статус и т.д.
Это то, что спрашивают на собеса. Главная боль QA в Kafka — изоляция тестов.
Проблема: В Kafka сообщения хранятся долго. Если ты запустишь тест и начнешь читать топик, ты можешь случайно прочитать сообщение от вчерашнего теста или от продакшена.
Как это решают (Твой козырь на собесе):
1. Фильтрация по Correlation ID / Request ID. Ты генерируешь уникальный ID, передаешь его в заголовках (Headers) или теле сообщения. В тесте ты читаешь топик, но в ассертах проверяешь только те сообщения, где header.correlation_id == твой_уникальный_id.
2. Уникальные тестовые топики. Перед прогоном тестов скрипт создает топик user-registered-test-vika-123, а после теста удаляет его.
3. Чтение с конца (Latest). Настройка консюмера так, чтобы он читал только те сообщения, которые пришли после момента запуска теста (по timestamp).
Популярные библиотеки:
kafka-clients, Spring Kafka (часто используют EmbeddedKafka для локальных тестов).confluent-kafka (самая быстрая и популярная), kafka-python.kafkajs.Вопрос 1: Чем Kafka отличается от RabbitMQ?
Вопрос 2: Что такое Consumer Group и зачем он нужен?
Вопрос 3: Как гарантировать, что сообщение доставлено ровно один раз (Exactly-once)?
| № | Задача | Статус | Время | Ресурс / Что сделать |
|---|---|---|---|---|
| 1 | Написать мини-продюсер | ⬜ | 1 час | Написать скрипт на Python/Java, который отправляет 5 JSON сообщений в тестовый топик. |
| 2 | Написать мини-консюмер | ⬜ | 1 час | Написать скрипт, который читает эти 5 сообщений и выводит их в консоль. |
| 3 | Разобраться с Offset | ⬜ | 45 мин | Поиграть с настройками auto.offset.reset (earliest vs latest). Понять, как консюмер "прыгает" по истории. |
| 4 | Написать API+Kafka тест | ⬜ | 2 часа | Сделать тест: POST-запрос -> ожидание сообщения в Kafka -> assert payload. Использовать фильтрацию по ID. |
| 5 | Проговорить ответы вслух | ⬜ | 30 мин | Ответить на 3 вопроса из Блока 4 вслух, засечь время (чтобы укладываться в 2 мин на ответ). |
💡 Лайфхак: Не пытайся сразу поднять локальный Kafka через Docker — это может затянуть и демотивировать. Используй бесплатные облачные кластеры для тестов (например, Upstash или Aiven free tier). Ты получишь URL, логин и пароль за 2 минуты и сразу начнешь писать код.