Раздел 15 · 30 вопросов

Kafka

30 вопросов и ответов в разделе Kafka.

Версии по языкам: English Russian Ukrainian

Вопросы этого раздела

  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. Что такое 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. Как обрабатывать ошибки при чтении сообщений в Kafka
  25. Что такое DLQ (Dead Letter Queue) в Kafka
  26. Как мониторить lag консьюмера в Kafka
  27. Что такое retention policy в Kafka
  28. Как удаляются старые сообщения из топика Kafka
  29. Можно ли читать сообщения из определённой партиции в Kafka
  30. Как реализовать фильтрацию сообщений на стороне консьюмера в Kafka

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

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 Как удаляются старые сообщения из топика ⭐⭐
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 experience, monitoring
  • 🎯 Шпаргалка для интервью — ключевые тезисы, частые вопросы, красные флаги, связанные темы