07/11/2026

Kafka

Разбор основ Apache Kafka, её применения в автотестах и топ-вопросов на собеседовании для QA Automation Engineer.

Блок 1. Что такое Kafka? (Простыми словами)

Аналогия: Представь себе умную ленту конвейера на заводе.

  • Работники (Продюсеры) кладут на ленту коробки (Сообщения).
  • Коробки едут по ленте (Топику).
  • Другие работники (Консюмеры) забирают коробки с ленты и обрабатывают их.

Главные термины (must know):

  • Broker — сервер Kafka (один "склад").
  • Topic (Топик) — категория/папка, куда пишутся сообщения (например, user-registered).
  • Partition (Партиция) — топик разбит на части (партиции), чтобы распределять нагрузку.
  • Producer (Продюсер) — сервис, который отправляет сообщение.
  • Consumer (Консюмер) — сервис, который читает сообщение.
  • Offset (Офсет) — уникальный ID сообщения внутри партиции. По сути, "закладка", которая показывает, какое сообщение консюмер прочитал последним.
  • Consumer Group (Группа консюмеров) — группа сервисов, которые вместе читают один топик. Каждое сообщение уходит только одному консюмеру внутри группы.

Блок 2. Зачем QA Automation Engineer'у Kafka?

В микросервисной архитектуре сервисы общаются асинхронно. Пример из жизни: 1. Пользователь нажимает "Зарегистрироваться" (UI/API тест). 2. Сервис А пишет в БД и кидает событие в Kafka: UserCreated. 3. Сервис Б читает Kafka и отправляет Welcome-письмо. 4. Сервис В читает Kafka и начисляет бонусные баллы.

Как ты это тестируешь: Ты не можешь просто сделать GET-запрос и проверить ответ. Тебе нужно: 1. Создать тестовые данные (отправить запрос). 2. Подписаться на топик в Kafka и "выловить" оттуда нужное сообщение. 3. Проверить (assert), что в сообщении верный user_id, статус и т.д.

Блок 3. Как работать с Kafka в автотестах (Практика)

Это то, что спрашивают на собеса. Главная боль QA в Kafka — изоляция тестов.

Проблема: В Kafka сообщения хранятся долго. Если ты запустишь тест и начнешь читать топик, ты можешь случайно прочитать сообщение от вчерашнего теста или от продакшена.

Как это решают (Твой козырь на собесе): 1. Фильтрация по Correlation ID / Request ID. Ты генерируешь уникальный ID, передаешь его в заголовках (Headers) или теле сообщения. В тесте ты читаешь топик, но в ассертах проверяешь только те сообщения, где header.correlation_id == твой_уникальный_id. 2. Уникальные тестовые топики. Перед прогоном тестов скрипт создает топик user-registered-test-vika-123, а после теста удаляет его. 3. Чтение с конца (Latest). Настройка консюмера так, чтобы он читал только те сообщения, которые пришли после момента запуска теста (по timestamp).

Популярные библиотеки:

  • Java:kafka-clients, Spring Kafka (часто используют EmbeddedKafka для локальных тестов).
  • Python:confluent-kafka (самая быстрая и популярная), kafka-python.
  • JS/TS:kafkajs.

Блок 4. Топ-3 вопроса на собеседовании и как на них отвечать

Вопрос 1: Чем Kafka отличается от RabbitMQ?

  • Как ответить: RabbitMQ — это классический брокер (Push-модель, умный брокер, глупый консюмер), сообщения удаляются после прочтения. Kafka — это распределенный лог (Pull-модель, глупый брокер, умный консюмер), сообщения хранятся на диске долго (retention), и консюмер сам управляет тем, какое сообщение читать (через офсеты). Kafka создана для огромных потоков данных.

Вопрос 2: Что такое Consumer Group и зачем он нужен?

  • Как ответить: Это механизм масштабирования. Если один консюмер не успевает обрабатывать сообщения из топика, мы добавляем еще несколько консюмеров в ту же группу. Kafka автоматически распределит партиции между ними. Каждое сообщение прочитает только один консюмер из группы.

Вопрос 3: Как гарантировать, что сообщение доставлено ровно один раз (Exactly-once)?

  • Как ответить: В Kafka это сложная задача. Обычно используют паттерн идемпотентности: на стороне консюмера (бизнес-логики) проверяют ID сообщения. Если сообщение с таким ID уже обрабатывалось — его просто игнорируют.

Блок 5. План изучения

№ЗадачаСтатусВремяРесурс / Что сделать
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 минуты и сразу начнешь писать код.