Какие основные практические применения у Apache Kafka?

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

Ответ

Apache Kafka — это распределённая система потоковой обработки событий (event streaming platform). Её основные применения:

1. Асинхронная межсервисная коммуникация

  • Связь микросервисов через публикацию/подписку на события (например, order.created, payment.processed).
  • Устранение жёстких зависимостей и повышение отказоустойчивости.

2. Сбор и агрегация данных в реальном времени

  • Централизованный сбор логов, метрик и телеметрии.
  • Потоковая передача данных в системы мониторинга (Prometheus) или аналитики (Spark, Flink).

3. Обработка событий (Event Sourcing / CQRS)

  • Хранение неизменяемой последовательности событий как источника истины.
  • Построение проекций (read models) для разных потребителей.

4. Change Data Capture (CDC)

  • Захват изменений из базы данных (через Debezium) и репликация в другие системы.
  • Синхронизация данных между разными хранилищами.

Пример публикации сообщения (Java Producer API):

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

try (Producer<String, String> producer = new KafkaProducer<>(props)) {
    ProducerRecord<String, String> record = 
        new ProducerRecord<>("orders", "order-123", "{ "status": "created" }");
    producer.send(record); // Асинхронная отправка
}

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