Kafka
30 питань і відповідей у розділі Kafka.
Питання цього розділу
- Що таке топiк (topic) у Kafka
- Що таке партиція (partition) і навіщо вона потрібна
- Як дані розподіляються по партиціях
- Що таке ключ повідомлення і як він впливає на партиціонування
- Що таке Consumer Group
- Як працює балансування консьюмерів у групі
- Чи можна мати більше консьюмерів, ніж партицій в топику
- Що станеться при додаванні нового консьюмера в групі
- Які гарантії доставки повідомлень надає Kafka
- У чому різниця між at-most-once, at-least-once і exactly-once
- Як налаштувати exactly-once семантику
- Що таке offset в Kafka
- Як працює commit offset
- У чому різниця між auto commit і manual commit
- Що таке ребаланс і коли він відбувається
- Що таке реплікація в Kafka
- Що таке leader і follower репліки
- Що таке ISR (In-Sync Replicas)
- Як Kafka забезпечує відмовостійкість
- Що таке producer acknowledgment і які режими існують (acks=0,1,all)
- Що таке batch в Kafka producer
- Як працює компресія повідомлень
- Що таке idempotent producer
- Як обробляти помилки при читанні повідомлень в Kafka
- Що таке DLQ (Dead Letter Queue) в Kafka
- Як моніторити lag консьюмера
- Що таке 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 досвід, monitoring
- 🎯 Шпаргалка для співбесіди — ключові тези, часті запитання, червоні прапорці, пов’язані теми