Kafka Streams¶
Раздел03 · Механизмы · Примеры
Тип материала: архитектурный разбор. Схемы и примеры иллюстративные, если не указано иное.
Область версий: Kafka Streams 4.1.0, JVM library, processing.guarantee=exactly_once_v2. Проверка источников: 2026-11-02. Baselines не объявляются latest/security recommendations.
Архитектура и роль¶
FACT. JVM library в обычном приложении; application.id идентифицирует stream application/group и internal resources. Topology разделяется на tasks по partitions, thread может исполнять несколько tasks. Не требуется отдельный Flink-style cluster manager, но нужны deployment/HA самого приложения.
Внутренние механизмы и движение данных¶
KStream описывает records, KTable — updates keyed state; joins/aggregations используют local state stores и changelog topics. Repartition topic перемещает key distribution, changelog восстанавливает state после task migration. Local RocksDB state directory ускоряет restart, но authoritative recovery требует доступного changelog/input retention.
flowchart TB
Kafka[Input partitions] --> Tasks[Application tasks and stream threads]
Tasks --> State[Local keyed state]
State --> Changelog[Kafka changelog]
Tasks --> Output[Transactional Kafka outputs]
Changelog --> Restore[Task migration restore]
Restore --> State
Ordering и guarantees¶
processing.guarantee=exactly_once_v2 координирует Kafka inputs, state/changelog и output records в transaction protocol поддерживаемой topology. Producer fencing/transaction timeouts важны при recovery. External JDBC/HTTP side effects из processor не становятся частью Kafka transaction. Ordering остаётся partition/task scope.
Версия и первичная документация.
Масштабирование и backpressure¶
Parallelism ограничен input/repartition partitions, streams threads и key skew. Standby replicas сокращают restore work ценой ресурсов; warmup/migration settings зависят от версии. Interactive queries читают распределённый local state, для global lookup приложение реализует routing/retries.
Failure / recovery / replay¶
Task restart восстанавливает committed state; aborted processing может физически исполниться снова. Изменение topology/internal topic names требует compatibility plan. Application reset может удалить progress/state и повторить effects; выполнять на изолированной generation с documented reset scope.
Версия и первичная документация.
Эксплуатация и мониторинг¶
State restore lag/rate, commit latency/failures, transaction errors, task migration/rebalances, thread health, RocksDB memory/disk и end-to-end watermark. application.id reuse независимыми deployments объединит membership/resources; отдельные environments/versions требуют осознанных namespaces.
Ограничения и критерии выбора¶
Хорош для Kafka-centric transformations/joins с application-owned JVM deployment. Для heterogeneous sources, сложного event-time контроля и большого shared processing estate Flink может дать иной operational model. «Library» не означает zero operations.
FinTech / iGaming и реальные источники¶
INFERENCE: keyed event enrichment, player state projections и transactional Kafka derived topics. Company-specific KafkaStreams4.1 financial deployment/guarantees в текущем registry UNKNOWN. Сравнение с Flink построено по supported mechanisms, не придуманному benchmark.
Практический пример¶
Практика конфигурации:
application.id=betting-enrichment-v1
bootstrap.servers=kafka:9092
processing.guarantee=exactly_once_v2
num.stream.threads=2
Это config fragment, не исполняемая topology; threads=2 — HYPOTHETICAL. Replay/recovery protocol разобран в глубокой теме EOS.
Типичные ошибки проектирования¶
Считать external SQL частью EOS; переиспользовать application.id для несовместимой topology; очищать changelog без retention plan; путать KTable update и append fact.
Вопросы на собеседовании¶
Local state потерян — данные потеряны? Не обязательно: можно восстановить из retained changelog при корректном committed progress.
Нужен JVM cluster manager? Отдельный engine manager нет, но приложение нужно размещать/перезапускать.
Почему больше threads не помогает? Ограничители — partitions/hot key или external sink.
Практические упражнения¶
Опишите migration topology с изменённым repartition key: internal topics, restore, separate application.id, comparison и controlled cutover.