Вопрос проверяет знание механизмов надёжной передачи и подтверждения сообщений в распределённой системе Kafka.
Гарантия доставки достигается за счёт параметров acks у продюсера (0, 1 или all), записи в журнал (log) и репликации партиций. При acks=all продюсер ждёт подтверждения от всех ISR-реплик прежде чем считать сообщение доставленным.
Параметр acks:
- acks=0 — без подтверждения (наименее надёжно).
- acks=1 — подтверждение от лидера.
- acks=all (или -1) — подтверждение от всех синхронных реплик (наиболее надёжно).
Репликация партиций:
- Каждая партиция имеет лидера и ISR (in-sync replicas).
- При записи лидер дублирует данные на реплики.
Политики поведения:
- min.insync.replicas настраивает минимальное число реплик для acks=all.
- Если реплик недостаточно, запрос отклоняется.
Идемпотентный продюсер и транзакции:
- Включает enable.idempotence=true для защиты от дублирующих записей.
- Транзакции позволяют группировать отправку в атомарные блоки.
Когда применять:
- Для критичных данных — acks=all, min.insync.replicas>=2, идемпотентность.
- Для менее критичных — можно снизить acks ради скорости.