Что означают acks=0, acks=1 и acks=all у Kafka producer?
- Как настроить продюсер 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?
Разбор темы
- Kafka Producer
Запись и сериализация, выбор партиции, батчинг и сжатие, acks и долговечность, идемпотентный producer и транзакции.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.