📨 Розділ 15 · 30 питань

Kafka

30 питань і відповідей у розділі Kafka.

Питання цього розділу

  1. Що таке топік (topic) в Kafka
  2. Що таке партиція (partition) і навіщо вона потрібна
  3. Як дані розподіляються по партиціях
  4. Що таке ключ повідомлення і як він впливає на партиціонування
  5. Що таке Consumer Group
  6. Як працює балансування консьюмерів у групі
  7. Чи можна мати більше консьюмерів, ніж партицій
  8. Що станеться при додаванні нового консьюмера в групі
  9. Які гарантії доставки повідомлень надає Kafka
  10. У чому різниця між at-most-once, at-least-once і exactly-once
  11. Як налаштувати exactly-once семантику
  12. Що таке offset в Kafka
  13. Як працює commit offset
  14. У чому різниця між auto commit і manual commit
  15. Що таке ребаланс і коли він відбувається
  16. Що таке реплікація в Kafka
  17. Що таке leader і follower репліки
  18. Що таке ISR (In-Sync Replicas)
  19. Як Kafka забезпечує відмовостійкість
  20. Що таке producer acknowledgment і які режими існують (acks=0,1,all)
  21. Що таке batch в Kafka producer
  22. Як працює компресія повідомлень
  23. Що таке idempotent producer
  24. Як обробляти помилки при читанні повідомлень
  25. Що таке DLQ (Dead Letter Queue)
  26. Як моніторити lag консьюмера
  27. Що таке retention policy
  28. Як видаляються старі повідомлення з топика
  29. Чи можна читати повідомлення з певної партиції
  30. Як реалізувати фільтрацію повідомлень на стороні консьюмера

Навігатор по розділу

30 запитань для підготовки до співбесіди на Middle/Senior Java Developer.


📋 Усі запитання

# Запитання Рівень складності
1 Що таке топік (topic) в Kafka ⭐
2 Що таке партиція (partition) і навіщо вона потрібна ⭐⭐
3 Як дані розподіляються по партиціях ⭐⭐
4 Що таке ключ повідомлення і як він впливає на партіціювання ⭐⭐
5 Що таке Consumer Group ⭐⭐
6 Як працює балансування консюмерів у групі ⭐⭐
7 Чи можна мати більше консюмерів, ніж партицій ⭐⭐
8 Що станеться при додаванні нового консюмера у групі ⭐⭐
9 Які гарантії доставки повідомлень надає Kafka ⭐⭐
10 У чому різниця між at-most-once, at-least-once та exactly-once ⭐⭐⭐
11 Як налаштувати exactly-once семантику ⭐⭐⭐
12 Що таке offset у Kafka ⭐⭐
13 Як працює комміт offset ⭐⭐
14 У чому різниця між auto commit та manual commit ⭐⭐
15 Що таке rebalancing і коли він відбувається ⭐⭐⭐
16 Що таке реплікація у Kafka ⭐⭐
17 Що таке leader та follower репліки ⭐⭐
18 Що таке ISR (In-Sync Replicas) ⭐⭐⭐
19 Як Kafka забезпечує відмовостійкість ⭐⭐⭐
20 Що таке producer acknowledgment і які режими існують ⭐⭐
21 Що таке batch у Kafka producer ⭐⭐
22 Як працює компресія повідомлень ⭐⭐
23 Що таке idempotent producer ⭐⭐⭐
24 Як обробляти помилки при читанні повідомлень ⭐⭐
25 Що таке DLQ (Dead Letter Queue) ⭐⭐
26 Як моніторити lag консюмера ⭐⭐
27 Що таке retention policy ⭐⭐
28 Як видаляються старі повідомлення з топiка ⭐⭐
29 Чи можна читати повідомлення з певної партиції ⭐⭐
30 Як реалізувати фільтрацію повідомлень на стороні консюмера ⭐⭐

🗺️ Карта залежностей тем

                    ┌──────────────────────────────────────────┐
                    │   ОСНОВИ 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
  • 🎯 Шпаргалка для співбесіди — ключові тези, часті запитання, червоні прапорці, пов’язані теми