Питання 19 · Розділ 15

Як Kafka забезпечує відмовостійкість

Kafka забезпечує відмовостійкість через реплікацію:

Мовні версії: English Russian Ukrainian

Рівень Junior

Основні механізми

Kafka забезпечує відмовостійкість через реплікацію:

1. Реплікація — дані на кількох брокерах
2. Leader election — автоматичний вибір нового лідера
3. Consumer group — консьюмери перезапускаються і продовжують

Приклад failover

Broker A (Leader) → впав
Broker B (Follower) → став Leader
Консьюмери → продовжили читання з нового лідера
Продюсери → продовжують запис на нового лідера

Replication Factor

replication-factor=3 → витримує падіння 2 брокерів (за умови що репліки
розподілені по різних брокерах, що відбувається за замовчуванням при достатній
кількості брокерів).
replication-factor=2 → витримує падіння 1 брокера
replication-factor=1 → немає відмовостійкості

Створення відмовостійкого топика

kafka-topics.sh --create \
  --topic orders \
  --partitions 3 \
  --replication-factor 3 \
  --bootstrap-server localhost:9092

Рівень Middle

Відмовостійкість на різних рівнях

Брокер:

RF=3 → дані на 3 брокерах
Витримує падіння 2 брокерів

Продюсер:

acks=all + retries → автоматичний retry
enable.idempotence → захист від дублікатів

Консьюмер:

Committed offsets → продовжує після перезапуску
Consumer group → автоматичний ребаланс

Leader Election

1. Leader впав
2. Controller виявив падіння
3. Вибирає нового лідера з ISR
4. Продюсери і консьюмери перемикаються

Min.insync.replicas

min.insync.replicas=2:
  Запис дозволений тільки якщо >= 2 реплік в ISR
  Захист від запису в єдину копію

Типові помилки

  1. Недостатня реплікація:
    RF=2, min.insync=1 → втрата даних при падінні лідера
    
  2. Unclean leader election:
    unclean.leader.election.enable=true → ризик втрати даних
    

Рівень Senior

Cross-Datacenter Replication

MirrorMaker 2:

Реплікація між дата-центрами
Active-passive або active-active topology
Асинхронна реплікація

Topology options:

1. Active-Passive:
   DC1 (active) → DC2 (passive)
   При падінні DC1 → DC2 стає active

2. Active-Active:
   DC1 ← → DC2
   Обидва DC приймають записи
   Складніше consistency

Failure Scenarios

1. Single Broker Failure:

RF=3, min.insync=2:
  Broker A (Leader) впав
  ISR=[B,C] → новий лідер з B або C
  Записи продовжуються (ISR >= 2)
  Дані не втрачені

2. Network Partition:

Брокери розділені на дві групи:
  Group 1: Broker A, B
  Group 2: Broker C

Group 1: ISR=[A,B] → працює
Group 2: ISR=[C] → запис відхиляється (ISR < min.insync)

3. Datacenter Failure:

Active-Passive:
  DC1 впав → MirrorMaker зупинився
  DC2 активується → продовжує роботу
  RPO = дані, репліковані до падіння
  RTO = час активації DC2

Recovery Procedures

1. Broker Recovery:

Впалий брокер restarts:
  → Підключається до кластера
  → Починає реплікувати з лідера
  → Коли наздоганяє → додається в ISR
  → Може стати лідером при наступному failover

2. Datacenter Recovery:

DC1 відновлений:
  → MirrorMaker resume replication
  → Sync даних між DC
  → Switch back або continue в DC2

Production Configuration

# Topic level
replication-factor: 3
min.insync.replicas: 2
unclean.leader.election.enable: false

# Broker level
replica.lag.time.max.ms: 30000
auto.leader.rebalance.enable: true

# Producer level
acks: all
enable.idempotence: true
retries: Integer.MAX_VALUE

# Consumer level
enable.auto.commit: false
isolation.level: read_committed
// isolation.level=read_committed потрібен для читання тільки закоммічених
// транзакційних повідомлень, ігноруючи скасовані.

Monitoring

Ключові метрики:

kafka.server:UnderReplicatedPartitions
kafka.server:IsrShrinksPerSec
kafka.server:ActiveControllerCounts
kafka.server:OfflinePartitionsCount
kafka.server:LeaderElectionRate

Alerts:

- Under-replicated partitions > 0 → warning
- Offline partitions > 0 → critical
- ISR shrinks rate > threshold → warning
- Controller changed → investigate
- Leader election rate > threshold → warning

Best Practices

✅ RF=3 для production
✅ min.insync.replicas=2
✅ acks=all для критичних даних
✅ Кросс-DC реплікація для disaster recovery
✅ Автоматичний leader rebalancer
✅ Моніторинг under-replicated partitions

❌ RF < 3 для production
❌ Один дата-центр для критичних даних
❌ unclean.leader.election.enable=true
❌ min.insync.replicas=1 з acks=all
❌ Без моніторингу ISR health

Архітектурні рішення

  1. RF=3 + min.insync=2 — баланс між availability і durability
  2. Cross-DC replication — для disaster recovery
  3. Unclean election = data loss — уникати в production
  4. Monitoring under-replicated partitions — ранній індикатор проблем

Резюме для Senior

  • Відмовостійкість будується на реплікації і ISR
  • RF=3 витримує падіння 2 брокерів
  • Cross-DC replication для disaster recovery
  • Monitoring under-replicated partitions критичний
  • Unclean leader election — останній захід з ризиком втрати даних

🎯 Шпаргалка для інтерв’ю

Обов’язково знати:

  • Відмовостійкість будується на реплікації (RF=3), ISR і leader election
  • RF=3 витримує падіння 2 брокерів; RF=2 — падіння 1 брокера
  • min.insync.replicas=2 + acks=all — захист від запису в єдину копію
  • Producer: acks=all + enable.idempotence=true + retries=INT_MAX
  • Consumer: committed offsets + consumer group auto-rebalancing при failover
  • При network partition: група з більшістю ISR працює, решта — запис відхиляється
  • Cross-DC replication (MirrorMaker 2) — для disaster recovery

Часті уточнюючі запитання:

  • Що буде при падінні одного брокера з RF=3? — Follower стає лідером, дані не втрачені.
  • Як producer обробляє failover? — Retries + idempotence → дублікати відхиляються брокером.
  • Що при network partition? — Група з більшістю ISR продовжує, minority — запис відхиляється.
  • Як consumer відновлюється? — Committed offsets → продовжує з останнього збереженого offset.

Червоні прапорці (НЕ говорити):

  • «RF=2 достатньо для критичних даних» — min.insync=1 при RF=2 = data loss risk
  • «Kafka не втрачає дані ніколи» — втрачає при unclean leader election
  • «Consumer вручну повинен відновлювати offset» — автоматично через consumer group
  • «Cross-DC replication синхронна» — асинхронна, RPO > 0

Пов’язані теми:

  • [[16. Що таке реплікація в Kafka]]
  • [[18. Що таке ISR (In-Sync Replicas)]]
  • [[20. Що таке producer acknowledgment і які режими існують (acks=0,1,all)]]
  • [[9. Які гарантії доставки повідомлень надає Kafka]]