Каково основное назначение Apache Kafka?

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

Ответ

Apache Kafka — это распределённая, отказоустойчивая, высокопроизводительная платформа потоковой передачи событий (event streaming platform).

Основное назначение: Надёжная обработка и хранение непрерывных потоков событий (данных) в реальном времени в режиме публикация-подписка (pub-sub).

Ключевые сценарии использования:

  1. Асинхронная межсервисная коммуникация (Messaging): Связь между микросервисами или распределёнными системами.
  2. Трек изменений данных (Change Data Capture - CDC): Фиксация и распространение изменений из базы данных.
  3. Сбор и агрегация логов и метрик: Централизованный сбор данных с множества источников.
  4. Обработка потоков событий (Stream Processing): Реакция на события в реальном времени (например, фрод-детекция, рекомендации).

Пример простого продюсера (Java):

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-topic", "order-123", "{ "status": "shipped" }");
    producer.send(record); // Асинхронная отправка сообщения в топик
}

Почему Kafka популярен?

  • Высокая пропускная способность: Обрабатывает миллионы сообщений в секунду.
  • Масштабируемость: Легко масштабируется горизонтально добавлением брокеров.
  • Отказоустойчивость и долговременное хранение: Данные реплицируются и могут храниться сколь угодно долго.
  • Гарантия порядка доставки: Сообщения в пределах одного партиции доставляются в порядке отправки.