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

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

Ответ

Kafka Streams — это клиентская библиотека Java/ Scala для построения приложений и микросервисов, которые обрабатывают потоки данных в Apache Kafka. Она позволяет выполнять сложные операции, такие как агрегация, соединение и преобразование, непосредственно на данных в топиках Kafka.

Ключевые концепции и применение:

  • Библиотека, а не отдельный кластер: Приложение Kafka Streams — это обычное Java-приложение, которое подключается к кластеру Kafka как продюсер и консьюмер.
  • Обработка с сохранением состояния (stateful): Поддерживает операции, требующие запоминания данных (например, count(), aggregate()), используя встроенное хранилище RocksDB или ин-мемори стейт.
  • Точная семантика обработки (exactly-once): Гарантирует, что каждая запись будет обработана ровно один раз, даже в случае сбоев.
  • Горизонтальное масштабирование: Приложение масштабируется путем запуска дополнительных инстансов. Библиотека автоматически перераспределяет задачи обработки (партиции) между ними.

Простой пример приложения, которое читает из топика, преобразует текст в верхний регистр и записывает в другой топик:

StreamsBuilder builder = new StreamsBuilder();
// KStream — абстракция потока записей
builder.stream("input-topic")
        .mapValues(value -> value.toString().toUpperCase())
        .to("output-topic");

KafkaStreams streams = new KafkaStreams(builder.build(), props);
streams.start();

Kafka Streams идеально подходит для ETL-пайплайнов, обработки событий в реальном времени и построения реактивных систем на основе событий (Event-Driven Architecture).