Для чего использовал Kafka

«Для чего использовал Kafka» — вопрос из категории Архитектура, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В моих проектах Kafka применялась как бэкбон для асинхронной коммуникации в микросервисной архитектуре. Основные сценарии использования:

1. Обработка событий пользовательских действий

// Producer для отправки событий
$producer = new RdKafkaProducer();
$producer->addBrokers("kafka-broker-1:9092,kafka-broker-2:9092");
$producer->setLogLevel(LOG_DEBUG);

$topic = $producer->newTopic("user-events");
$topic->produce(
    RD_KAFKA_PARTITION_UA, 
    0, 
    json_encode([
        'event_id' => uniqid(),
        'user_id' => $userId,
        'action' => 'purchase',
        'timestamp' => time(),
        'payload' => $orderData
    ])
);
$producer->flush(5000); // Ожидаем отправки

2. Синхронизация данных между сервисами

  • Каталог товаров → Поисковый индекс
  • Профили пользователей → Рекомендательная система
  • Транзакции → Аналитическая платформа

3. Буферизация пиковых нагрузок При резком росте запросов (например, во время распродаж) Kafka выступала буфером, предотвращая падение downstream-сервисов. Consumer'ы обрабатывали сообщения со своей скоростью, а Kafka гарантировала доставку и порядок сообщений в рамках партиции.

4. Реализация CQRS и Event Sourcing В одном проекте мы использовали Kafka как event store, где каждый change-ивент записывался в топик domain-events. Это позволяло реконструировать состояние системы в любой момент времени и строить различные read-модели.