Что такое Apache Kafka и для чего он используется?

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

Ответ

Apache Kafka — это распределенная потоковая платформа обмена сообщениями, работающая по модели "публикация-подписка" (pub-sub). Она предназначена для обработки высоконагруженных потоков данных в реальном времени с гарантированной доставкой и отказоустойчивостью.

Основные концепции:

  • Топик (Topic): Именованный поток сообщений (логическая категория).
  • Партиция (Partition): Топик делится на партиции для параллельной обработки и масштабирования.
  • Producer (Продюсер): Приложение, публикующее сообщения в топик.
  • Consumer (Консьюмер): Приложение, подписывающееся на топик и читающее сообщения.
  • Broker (Брокер): Сервер Kafka, хранящий данные топиков.
  • Consumer Group: Группа консьюмеров, совместно потребляющих сообщения из топика (каждое сообщение читается только одним консьюмером в группе).

Пример кода продюсера на 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)) {
    // Отправка сообщения с ключом "key1" и значением "Hello Kafka" в топик "test-topic"
    ProducerRecord<String, String> record = new ProducerRecord<>("test-topic", "key1", "Hello Kafka");
    producer.send(record);
}

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

  1. Стриминг данных: Обработка логов, метрик, активностей пользователей.
  2. Интеграция микросервисов: Асинхронная коммуникация через события (Event-Driven Architecture).
  3. Мост между системами: Загрузка данных в Data Lake или хранилища (например, через Kafka Connect).