Вопрос с собеседования · Брокеры сообщений

Что означают 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

Подробно

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.

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

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

Показать варианты и ответ
  • ✗Это уровни приоритета: 0 — низкий, 1 — средний, all — высокий
  • ✗acks=0 ждёт всех реплик, acks=1 — одну любую, acks=all не ждёт никого и самый быстрый
  • ✓0 — не ждать ответа; 1 — ждать лидера; all — ждать все реплики из ISR
  • ✗acks определяет таймаут отправки в миллисекундах

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

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

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования