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

Что делает настройка auto.offset.reset=earliest?

MiddleKafka ConsumerKafka
Ещё спрашивают так:
  • С какого места читает новый consumer group?
Коротко

auto.offset.reset действует, только когда у группы нет сохранённого offset (новая группа или offset удалён по сроку). earliest — читать с самого раннего доступного, latest — только новые, none — ошибка.

  • По умолчанию latest: новая группа пропустит всё, что было до её старта
  • Если сохранённый offset есть, настройка игнорируется
  • Offset группы удаляется через offsets.retention.minutes (7 дней) после неактивности

А ещё Перемотка вручную — kafka-consumer-groups.sh --reset-offsets

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

Подробно

Группа потребителей хранит свою позицию в __consumer_offsets. При старте потребитель продолжает с сохранённого offset. Настройка auto.offset.reset нужна для случаев, когда позиции нет:

  • новая группа читает топик впервые;
  • сохранённый offset удалён — группа была неактивна дольше offsets.retention.minutes (по умолчанию 7 дней);
  • сохранённый offset указывает на удалённые по retention данные.

Значения:

  • earliest — начать с самого старого доступного сообщения (вся история в пределах хранения);
  • latest (по умолчанию) — начать с конца: обрабатывать только новые;
  • none — бросить исключение, пусть решает приложение.

Ловушка: новый сервис с latest запускается после того, как события уже пошли, — и пропускает их. Для сервисов, которым важны все события, — earliest и идемпотентная обработка. Наоборот, для «живых» уведомлений старые события не нужны.

Ручная перемотка — kafka-consumer-groups --reset-offsets --to-datetime или --to-earliest при остановленной группе, например чтобы перечитать события после исправления бага.

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

  • Когда настройка применяется.
  • Значения и поведение по умолчанию.
  • Практические ловушки и ручная перемотка.

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

  • Думать, что earliest заставляет каждый раз читать с начала.

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

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

Показать варианты и ответ
  • ✗Всегда перечитывает topic с начала при каждом запуске consumer
  • ✓Начинает читать с самого раннего доступного offset, если у группы ещё нет committed offset
  • ✗Удаляет committed offsets группы
  • ✗Коммитит offset после каждого record

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

  • Чем earliest отличается от latest?
  • Как вручную сбросить offsets группы?

Разбор темы

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

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

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

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

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