Kafka rebalance на собеседовании Data Engineer
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем спрашивают на собесе DE
Rebalance — частая боль Kafka в проде. На собесе DE: «как уменьшить rebalance», «cooperative vs eager».
Когда происходит rebalance
Triggers:
- Consumer joins group.
- Consumer leaves (graceful или crash).
- Consumer не sends heartbeat в
session.timeout.ms. - Topic partitions changed.
max.poll.interval.msexceeded (consumer думал что обрабатывает, но вышел за лимит).
Stop-the-world проблема
В классическом (eager) protocol rebalance:
- Coordinator triggers rebalance.
- Все consumers stop processing.
- Revoke all partitions.
- New assignment computed.
- Consumers re-subscribe.
- Resume processing.
Время: секунды-минуты на больших groups.
Impact:
- Lag растёт во время rebalance.
- При частых rebalances — pipeline постоянно простаивает.
- Каждый rebalance — opportunity for ошибок (offset commit).
Static membership
Kafka 2.4+. Consumer фиксирует ID между restarts.
group.instance.id=consumer-1При коротких restart (< session.timeout.ms) — Kafka understand тот же consumer вернулся, не triggers rebalance.
Use case. Deployments / restarts на k8s.
Caveats:
- Если consumer died (не restarted) — лучше подождать
session.timeout.ms. - Increase
session.timeout.ms— допустимый downtime до rebalance.
Incremental cooperative
Kafka 2.4+, default с 3.0.
CooperativeStickyAssignor.
Вместо stop-the-world:
- Tell each consumer keep current assignment.
- Compute new assignment.
- Difference — only changed partitions are revoked.
- Other consumers continue processing.
Только partitions, нужные для re-assignment, паузнуты.
spring.kafka.consumer.properties.partition.assignment.strategy=org.apache.kafka.clients.consumer.CooperativeStickyAssignorВ новых apps — should be default.
Best practices
1. Use cooperative + static membership. Минимум disruptions.
2. Tune session.timeout.ms и heartbeat.interval.ms. Дефолт 45s / 3s. Lower — faster failure detection. Higher — больше allowance.
3. max.poll.interval.ms. Должен покрывать longest processing time. Default 5 min.
4. Smaller batches. max.poll.records низкий → faster processing per poll.
5. Process в background thread. Чтобы main thread всегда poll'ит. Async commit.
6. Monitor rebalance frequency. Метрики kafka_consumer_coordinator_rebalance_rate.
Связанные темы
- Kafka на собесе DE
- Kafka consumer groups для DE
- Kafka Streams для DE
- Spark Structured Streaming для DE
- Подготовка к собесу Data Engineer
FAQ
Sticky vs Range assignor?
Range — простой, partitions делятся диапазонами. Sticky — сохраняет существующие assignments при rebalance, минимизирует movement.
Это официальная информация?
Нет. Статья основана на документации Apache Kafka 3.x.
Тренируйте Data Engineering — откройте тренажёр с 1500+ вопросами для собесов.