Итоги модуля: Consumers
Этот модуль охватил полный цикл работы с consumer-стороной Kafka: от базового API и управления offset до advanced механизмов ребалансировки, static membership и share groups. Ключевые акценты — KIP-848 как современный стандарт протокола ребалансировки в Kafka 4.0 и KIP-932 как production-ready queue semantics в Kafka 4.2.
Что мы изучили
Consumer API
Consumer API (Урок 01): KafkaConsumer(bootstrap_servers, group_id, auto_offset_reset). subscribe(topics) vs assign(partitions). poll() loop — единственный способ получить данные. ConsumerRecord(topic, partition, offset, key, value, timestamp).Управление Offset
Offset Management (Урок 02): auto_offset_reset='earliest'/'latest'. enable_auto_commit — удобно, но риск потери. Manual commit (enable_auto_commit=False) + commit() после обработки = at-least-once. seek() для replay.Consumer Groups
Consumer Groups (Урок 03): group.id объединяет consumer. Каждая партиция → ровно один consumer. Group coordinator хранит offsets в __consumer_offsets. Масштабируем до num_partitions. Несколько групп = независимое чтение.Протоколы ребалансировки
Ребалансировка (Урок 04): Eager (legacy) — глобальный стоп-мир, JoinGroup/SyncGroup. Cooperative — двухфазный, только затронутые партиции. KIP-848 (стандарт Kafka 4.0) — сервер-driven, ConsumerGroupHeartbeat API, без синхронизационного барьера, до 20x быстрее.Static Membership
Static Membership (Урок 05): group.instance.id — стабильный ID вместо эфемерного. Reconnect без ребалансировки при рестарте меньше session.timeout.ms. Идеально для Kubernetes StatefulSet. max.poll.interval.ms — отдельный таймаут для poll().Share Groups (KIP-932)
Share Groups KIP-932 (Урок 06): queue semantics в Kafka 4.2. Несколько consumer'ов читают одну partition кооперативно через acquisition lock. Per-record ACCEPT/RELEASE/REJECT. Встроенный poison message protection через delivery_attempt_limit. Replaces RabbitMQ для task queue use case'ов.Дерево решений: выбор стратегии offset
Правильная стратегия управления offset зависит от требований к надёжности и производительности:
Нет закоммиченного offset — что читать?
Стартовая точка: новая consumer group, нет закоммиченного offset.earliest — читать с начала
auto_offset_reset='earliest': обработать всю историю с offset 0. Типичный случай: аналитика, batch обработка, новая версия сервиса.latest — только новые
auto_offset_reset='latest': пропустить историю, читать только новые сообщения. Типичный случай: метрики, уведомления в реальном времени.Как фиксировать прогресс?
После первого poll() — нужно управлять offset.Auto-commit (некритичные данные)
enable_auto_commit=True: Kafka автоматически коммитит каждые 5 сек. At-most-once при crash между auto-commit и обработкой. Для некритичных данных: метрики, логи.Manual commit (критичные данные)
enable_auto_commit=False + commit() после обработки: at-least-once. Для финансовых транзакций, заказов, критичных бизнес-событий.KIP-848: стандарт для Kafka 4.0
Ключевой вывод модуля: KIP-848 — это не опция и не «расширенная возможность». Это стандартный протокол ребалансировки в Kafka 4.0+, который заменяет устаревший JoinGroup/SyncGroup подход.
Kafka 4.0: group.protocol=consumer (opt-in)
Kafka 4.0: group.protocol=consumer включается явно на стороне consumer. Сервер поддерживает оба протокола (classic + consumer). Рекомендуется для всех новых приложений.Kafka 4.2: default (без конфигурации)
Kafka 4.2: group.protocol=consumer является дефолтным значением. Устаревший classic protocol доступен через явную настройку group.protocol=classic.# consumer.properties для Kafka 4.0
group.id=my-application
group.protocol=consumer
# Опционально: стабильное членство
# group.instance.id=consumer-pod-0
Краткая шпаргалка по конфигурациям
| Параметр | По умолчанию | Что изменить |
|---|---|---|
auto_offset_reset | latest | earliest для обработки истории |
enable_auto_commit | True | False для at-least-once гарантий |
auto_commit_interval_ms | 5000 | Уменьшить если нужно частый коммит |
session_timeout_ms | 45000 | Увеличить для стабильной среды |
max_poll_interval_ms | 300000 | Увеличить для долгой обработки |
group.protocol | classic (4.0) | consumer для KIP-848 |
group.instance.id | (нет) | Установить для static membership |
Следующий шаг
Модуль 04 — «Внутреннее устройство Kafka» — раскрывает, что происходит на диске: файлы лог-сегментов (.log, .index, .timeindex), механика LEO vs High Watermark, log compaction и tiered storage. Понимание internals критически важно для диагностики production-проблем.