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

Kafka

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

Ukrainian Kafka Вихідний Markdown
Мовні версії: English Russian Ukrainian

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

  1. Що таке топiк (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. Як обробляти помилки при читанні повідомлень в Kafka
  25. Що таке DLQ (Dead Letter Queue) в Kafka
  26. Як моніторити lag консьюмера
  27. Що таке retention policy в Kafka
  28. Як видаляються старі повідомлення з топика Kafka
  29. Чи можна читати повідомлення з певної партиції в Kafka
  30. Як реалізувати фільтрацію повідомлень на стороні консьюмера в Kafka

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

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


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

# Запитання Рівень складності
1 Що таке топiк (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
  • 🎯 Шпаргалка для співбесіди — ключові тези, часті запитання, червоні прапорці, пов’язані теми