Расскажите про опыт работы с Apache Kafka.

«Расскажите про опыт работы с Apache Kafka.» — вопрос из категории Брокеры сообщений, который задают на 31% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В рамках тестирования распределённых и event-driven систем я работал с Apache Kafka. Мой опыт включает:

  • Настройку тестового окружения: Развёртывание локального Kafka-кластера (используя Docker Compose) и использование EmbeddedKafka для модульных и интеграционных тестов.
  • Тестирование потоков данных: Проверка корректности отправки, маршрутизации и потребления сообщений между продюсерами и консьюмерами.
  • Валидацию данных: Проверка формата сообщений (JSON Schema, Avro) и их соответствия контрактам.
  • Тестирование отказоустойчивости: Моделирование сбоев брокеров, проверка механизмов повторной обработки (retry) и работы с "мёртвыми письмами" (dead-letter queues).
  • Инструменты: Использовал Kafkacat для ад-hoc тестирования и мониторинга топиков, а также интеграцию проверок в CI/CD.

Пример интеграционного теста на Java с использованием Spring Kafka и EmbeddedKafka:

@SpringBootTest
@EmbeddedKafka(partitions = 1, brokerProperties = { "listeners=PLAINTEXT://localhost:9092", "port=9092" })
class OrderEventServiceTest {

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    @Test
    void whenValidOrderEventPublished_thenItIsConsumedAndProcessed() {
        String orderEvent = "{"orderId":"123", "status":"CREATED"}";
        String topic = "order-events";

        // 1. Публикация тестового события в Kafka
        kafkaTemplate.send(topic, orderEvent);

        // 2. Ожидание и проверка, что сервис-консьюмер корректно обработал сообщение
        await().atMost(10, SECONDS)
               .untilAsserted(() -> {
                   // Проверяем состояние в тестовой БД или моке сервиса
                   assertThat(orderRepository.findStatusById("123"))
                       .isEqualTo("PROCESSING");
               });
    }
}