Получить доступ

Что означают acks=0, acks=1 и acks=all у Kafka producer?

SeniorKafka ProducerKafka
Ещё спрашивают так:
  • Как настроить продюсер Kafka, чтобы не терять сообщения?
Коротко

acks=0 — не ждём подтверждения: максимум скорости, потери возможны. acks=1 — ждём запись лидером: потеря при падении лидера до репликации. acks=all — ждём все синхронные реплики (ISR): надёжно.

  • acks=all по умолчанию с Kafka 3.0 (вместе с идемпотентностью)
  • Надёжность даёт связка: acks=all + min.insync.replicas=2 + replication.factor=3
  • Цена acks=all — задержка на репликацию

А ещё acks=all при ISR из одного лидера — то же, что acks=1, отсюда min.insync.replicas

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

acks=0 — продюсер не ждёт ответа брокера. Сообщение может потеряться в сети или на брокере, а продюсер не узнает. Подходит для метрик и логов, где потеря допустима.

acks=1 — брокер-лидер записал сообщение в свой журнал (в page cache) и ответил. Если лидер упадёт до того, как реплики скопировали сообщение, а лидером станет реплика без него, — подтверждённое сообщение потеряно.

acks=all (-1) — лидер отвечает, когда сообщение получили все реплики из ISR (in-sync replicas). Потеря возможна только при одновременной потере всех реплик ISR. Задержка выше — нужно дождаться реплик.

Важно вместе: если ISR сжался до одного лидера (реплики отстали), acks=all подтверждает после записи одним лидером. Поэтому задают min.insync.replicas=2 на топике: при меньшем числе синхронных реплик брокер отклоняет запись с ошибкой — лучше отказ, чем ложная надёжность.

Остальное для надёжности продюсера: enable.idempotence=true (без дублей при повторах), достаточные retries и delivery.timeout.ms, обработка ошибок в callback отправки, unclean.leader.election.enable=false.

Что хотят услышать

  • Что подтверждается при каждом значении.
  • Сценарий потери при acks=1.
  • Связка с min.insync.replicas и replication.factor.

Частые ошибки

  • Считать acks=all достаточным без min.insync.replicas.
  • Не обрабатывать ошибки отправки в callback.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓acks=0 — без подтверждения (fire-and-forget); acks=1 — ждать leader (потеря при падении до репликации); acks=all — ждать все ISR (надёжно при min.insync.replicas≥2)
  • ✗Это уровни приоритета: 0 низкий, 1 средний, all высокий
  • ✗acks=0 ждёт всех реплик, acks=all не ждёт никого
  • ✗acks определяет таймаут отправки в миллисекундах

Что спросят дальше

  • Что такое ISR?
  • Как enable.idempotence связан с retries?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем