Какой у вас уровень знания Apache Kafka?

«Какой у вас уровень знания Apache Kafka?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я обладаю практическими знаниями Apache Kafka на уровне тестирования и интеграции.

Что я умею и понимаю:

  • Основные концепции: Роль producer, consumer, topic, partition, offset, consumer group и брокеров.
  • Тестирование компонентов: Написание и выполнение тестов для производителей (producers) и потребителей (consumers), проверка корректности отправки и получения сообщений.
  • Проверка отказоустойчивости: Тестирование поведения системы при отключении брокера, перераспределении партиций, повторной обработке сообщений.
  • Работа с форматами: Опыт работы с сообщениями в форматах JSON, Avro (с использованием Schema Registry).
  • Интеграционное тестирование: Использование Kafka как шины событий в тестовых сценариях микросервисной архитектуры.
  • Базовое администрирование: Умение поднять локальный кластер (например, с помощью Docker), создать топик, изменить его конфигурацию.

Пример интеграционного теста для Consumer на Java:

@Test
public void testKafkaConsumerReceivesMessage() {
    String topicName = "order-events";
    String testOrderId = "order-123";
    String testEventPayload = "{"status": "CREATED"}";

    // 1. Отправка тестового сообщения в топик
    ProducerRecord<String, String> record = 
        new ProducerRecord<>(topicName, testOrderId, testEventPayload);
    kafkaTemplate.send(record).get(); // Используем KafkaTemplate или Producer

    // 2. Ожидание и проверка, что consumer получил сообщение
    ConsumerRecord<String, String> receivedRecord = 
        kafkaConsumer.poll(Duration.ofSeconds(10)).iterator().next();

    assertEquals(testOrderId, receivedRecord.key());
    assertEquals(testEventPayload, receivedRecord.value());
    assertEquals(topicName, receivedRecord.topic());
}

Готов обсуждать тестовые стратегии для систем, построенных на основе событийной архитектуры с использованием Kafka.