Kafka
30 вопросов и ответов в разделе Kafka.
Вопросы этого раздела
- Что такое топик (topic) в Kafka
- Что такое партиция (partition) и зачем она нужна
- Как данные распределяются по партициям
- Что такое ключ сообщения и как он влияет на партиционирование
- Что такое Consumer Group
- Как работает балансировка консьюмеров в группе
- Можно ли иметь больше консьюмеров, чем партиций в топике
- Что произойдёт при добавлении нового консьюмера в группе
- Какие гарантии доставки сообщений предоставляет Kafka
- В чём разница между at-most-once, at-least-once и exactly-once
- Как настроить exactly-once семантику
- Что такое offset в Kafka
- Как работает commit offset
- В чём разница между auto commit и manual commit
- Что такое rebalancing и когда он происходит
- Что такое репликация в Kafka
- Что такое leader и follower реплики
- Что такое ISR (In-Sync Replicas)
- Как Kafka обеспечивает отказоустойчивость
- Что такое producer acknowledgment и какие режимы существуют?
- Что такое batch в Kafka producer
- Как работает компрессия сообщений
- Что такое idempotent producer
- Как обрабатывать ошибки при чтении сообщений в Kafka
- Что такое DLQ (Dead Letter Queue) в Kafka
- Как мониторить lag консьюмера в Kafka
- Что такое retention policy в Kafka
- Как удаляются старые сообщения из топика Kafka
- Можно ли читать сообщения из определённой партиции в Kafka
- Как реализовать фильтрацию сообщений на стороне консьюмера в Kafka
Навигатор по разделу
30 вопросов для подготовки к собеседованию на Middle/Senior Java Developer.
📋 Все вопросы
🗺️ Карта зависимостей тем
┌──────────────────────────────────────────┐
│ ОСНОВЫ KAFKA (1-4) │
│ 1. Топик │
│ 2. Партиция │
│ 3. Распределение по партициям │
│ 4. Ключ сообщения │
└──────────────────┬───────────────────────┘
│
┌──────────────────────────┼──────────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌────────────────────┐
│ CONSUMER │ │ DELIVERY │ │ PRODUCER │
│ GROUPS (5-8) │ │ GUARANTEES │ │ (20-23) │
│ 5. Consumer │ │ (9-11) │ │ 20. acks=0,1,all │
│ Group │ │ 9. Гарантики │ │ 21. Batch │
│ 6. Балансир. │ │ 10. At-most/ │ │ 22. Компрессия │
│ 7. Больше конс.│ │ least/ │ │ 23. Idempotent │
│ 8. Добавление │ │ exactly │ │ producer │
│ консьюмера │ │ 11. Настройка │ │ │
└───────┬───────┘ └───────┬───────┘ └────────┬───────────┘
│ │ │
└────────────────────────┼────────────────────────┘
▼
┌──────────────────────────────────────────┐
│ OFFSET И REBALANCING (12-15) │
│ 12. Offset │
│ 13. Commit offset │
│ 14. Auto vs Manual commit │
│ 15. Rebalancing │
└──────────────────────────────────────────┘
│
┌────────────────────────┼────────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌────────────────────┐
│ РЕПЛИКАЦИЯ │ │ ОШИБКИ И │ │ RETENTION И │
│ И FA (16-19) │ │ DLQ (24-26) │ │ ФИЛЬТРАЦИЯ │
│ 16. Репликация │ │ 24. Обработка │ │ (27-30) │
│ 17. Leader/ │ │ ошибок │ │ 27. Retention │
│ Follower │ │ 25. DLQ │ │ 28. Удаление │
│ 18. ISR │ │ 26. Lag monit. │ │ 29. Чтение партиции│
│ 19. Fault │ │ │ │ 30. Фильтрация │
│ tolerance │ │ │ │ │
└───────────────┘ └───────────────┘ └────────────────────┘
🎯 Рекомендуемый порядок изучения
🟢 Уровень Junior (недели 1-2)
| Шаг | Тема | Файлы | Цель |
|---|---|---|---|
| 1 | Основы | Q1, Q2, Q3, Q4 | Топик, партиция, ключ, распределение |
| 2 | Consumer Group | Q5, Q6 | Группа, балансировка |
| 3 | Offset и commit | Q12, Q13, Q14 | Offset, commit types |
| 4 | Delivery guarantees | Q9, Q10 | At-most, at-least, exactly-once |
| 5 | Producer acks | Q20 | acks=0,1,all |
🟡 Уровень Middle (недели 3-4)
| Шаг | Тема | Файлы | Цель |
|---|---|---|---|
| 1 | Rebalancing | Q7, Q8, Q15 | Когда происходит, eager vs cooperative |
| 2 | Replication | Q16, Q17, Q18 | ISR, leader/follower, fault tolerance |
| 3 | Batch и compression | Q21, Q22 | batch.size, linger.ms, lz4/gzip/snappy |
| 4 | Error handling | Q24, Q25 | Retry, DLQ, poison pill |
| 5 | Retention | Q27, Q28 | retention.ms, retention.bytes, cleanup.policy |
| 6 | Monitoring | Q26 | Consumer lag, tools |
🔴 Уровень Senior (недели 5-6)
| Шаг | Тема | Файлы | Цель |
|---|---|---|---|
| 1 | Exactly-once | Q11 | EOS v1 vs v2, Producer ID/Epoch, Outbox |
| 2 | Idempotent producer | Q23 | PID, Epoch, max.in.flight, deduplication |
| 3 | Fault tolerance deep | Q19 | RF, min.insync.replicas, unclean election |
| 4 | Advanced consumer | Q29, Q30 | assign() vs subscribe(), filtering patterns |
| 5 | ISR deep dive | Q18 | ISR shrink/expand, LEO, HW, leader epoch |
| 6 | Chaos engineering | Q15 (Senior) | Cascading rebalancing, GC pauses, tuning |
🔗 Ключевые связи между темами
Тема: Основы Kafka
Q1 (Топик) → Q2 (Партиция) → Q3 (Распределение) → Q4 (Ключ)
Ключевые связи:
- Q2 ↔ Q16: Партиции реплицируются для отказоустойчивости
- Q3 ↔ Q20: acks=all влияет на то, когда сообщение считается доставленным
- Q4 ↔ Q3: Ключ определяет партицию через MurmurHash
Тема: Consumer Groups
Q5 (Consumer Group) → Q6 (Балансировка) → Q7 (Больше консьюмеров)
↓
Q8 (Добавление консьюмера) → Q15 (Rebalancing)
Ключевые связи:
- Q5 ↔ Q12: Каждый консьюмер коммитит offset для каждой партиции
- Q6 ↔ Q15: Балансировка — это и есть ребаланс
- Q7 ↔ Q8: Лишние консьюмеры простаивают, добавление нового → ребаланс
Тема: Offset и Delivery
Q12 (Offset) → Q13 (Commit) → Q14 (Auto vs Manual)
↓
Q9 (Гарантии) → Q10 (At-most/at-least/exactly) → Q11 (Настройка exactly-once)
Ключевые связи:
- Q13 ↔ Q9: Коммит ДО обработки = at-most-once, ПОСЛЕ = at-least-once
- Q14 ↔ Q13: Auto commit = проще, но риск потери; Manual = контроль
- Q10 ↔ Q11: Exactly-once требует transactional producer
Тема: Producer
Q20 (acks) → Q21 (Batch) → Q22 (Компрессия) → Q23 (Idempotent)
Ключевые связи:
- Q20 ↔ Q23: Idempotent producer + acks=all = exactly-once delivery в топик
- Q21 ↔ Q22: Batch + compression = максимальный throughput
- Q23 ↔ Q11: Idempotent producer — основа exactly-once
Тема: Fault Tolerance
Q16 (Репликация) → Q17 (Leader/Follower) → Q18 (ISR) → Q19 (Fault tolerance)
Ключевые связи:
- Q17 ↔ Q18: Leader всегда в ISR, followers выходят из ISR если отстают
- Q18 ↔ Q19: ISR shrink → снижение fault tolerance
- Q16 ↔ Q20: acks=all ждёт подтверждения от всех ISR реплик
Тема: Operations
Q24 (Обработка ошибок) → Q25 (DLQ) → Q26 (Lag monitoring)
↓
Q27 (Retention) → Q28 (Удаление) → Q29 (Чтение партиции) → Q30 (Фильтрация)
Ключевые связи:
- Q24 ↔ Q25: DLQ — последнее средство после retries
- Q25 ↔ Q26: Lag monitoring помогает обнаружить проблемы до DLQ
- Q27 ↔ Q28: Retention policy определяет когда и как удаляются сообщения
- Q29 ↔ Q30: assign() для чтения конкретных партиций, фильтрация на стороне консьюмера
🎓 Шпаргалка: что знать для каждого уровня
🟢 Junior
- Топик = логический канал, партиция = под-канал для параллелизма
- Consumer Group = механиз деления партиций между консьюмерами
- Offset = позиция в партиции, commit = сохранение позиции
- acks=0 (fire-and-forget), acks=1 (leader only), acks=all (все ISR)
- At-most-once, at-least-once, exactly-once — три семантики доставки
🟡 Middle
- Rebalancing: eager (полный стоп) vs cooperative (частичный)
- ISR: реплики, которые догнали лидера. Leader всегда в ISR
- Batch: batch.size, linger.ms, compression — три рычага throughput
- DLQ: очередь для сообщений, которые не удалось обработать после N retries
- Retention: retention.ms (время) + retention.bytes (размер на партицию)
- Sticky partitioning: Kafka 2.4+ заменяет round-robin
🔴 Senior
- Exactly-once: EOS v2 (Kafka 2.5+), Producer ID + Epoch, transaction coordinator
- Idempotent producer: deduplication на уровне брокера через PID + sequence
- ISR shrink/expand: мониторинг критичен для fault tolerance
- Cascading rebalancing: GC pause → exclude → rebalance → overload → ещё один падает
- Outbox pattern: для exactly-once Kafka-to-Database
- Leader Epoch: отслеживает потерю данных при failover
📝 Формат каждого файла
Каждый файл содержит:
- 🟢 Junior Level — базовое понимание, простые аналогии, примеры
- 🟡 Middle Level — внутренности, типичные ошибки, практические примеры
- 🔴 Senior Level — deep dive, edge cases, production experience, monitoring
- 🎯 Шпаргалка для интервью — ключевые тезисы, частые вопросы, красные флаги, связанные темы