Ответ
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).