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

Какая гарантия порядка в Kafka является базовой?

MiddleKafka: topic, partition, offsetKafka
Ещё спрашивают так:
  • Как сохранить порядок событий одного заказа в Kafka?
Коротко

Kafka гарантирует порядок только внутри партиции. Чтобы события одного заказа шли по порядку, у них должен быть одинаковый ключ (order_id) — тогда они попадут в одну партицию.

  • Между партициями порядка нет
  • Повторы продюсера могут переставить сообщения — нужна идемпотентность (enable.idempotence=true)
  • Увеличение числа партиций меняет партицию для ключа — порядок ломается на переходе

А ещё Глобальный порядок — только одна партиция, без параллелизма

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

Подробно

Гарантия. Сообщения в партицию дописываются по порядку, и потребитель читает их в том же порядке. Для сообщений в разных партициях порядок не определён: потребители читают их параллельно.

Как сохранить порядок для сущности — ключ сообщения: продюсер выбирает партицию по хешу ключа, и все события с ключом order:42 идут в одну партицию.

Что может нарушить:

  • повторы продюсера — при max.in.flight.requests.per.connection > 1 и повторах без идемпотентности второй батч может записаться раньше повторённого первого. Идемпотентный продюсер (по умолчанию с Kafka 3.0) сохраняет порядок при до 5 запросов в полёте;
  • увеличение числа партиций — hash(key) % N меняется, новые события ключа идут в другую партицию, пока старые ещё не обработаны;
  • параллельная обработка внутри потребителя — если обрабатывать сообщения партиции в пуле потоков без группировки по ключу;
  • повторы через retry-топики — сообщение уходит на повтор, следующее за ним обрабатывается раньше.

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

  • Порядок только в партиции.
  • Ключ сообщения для сохранения порядка сущности.
  • Что нарушает порядок.

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

  • Ожидать глобального порядка в топике.
  • Отправлять события сущности без ключа.

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

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

Показать варианты и ответ
  • ✗Глобальный порядок всех сообщений во всех topics
  • ✓Порядок сообщений внутри одной partition
  • ✗Порядок только между разными consumer groups
  • ✗Kafka не даёт никаких гарантий порядка

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

  • Как обеспечить порядок событий одного пользователя?
  • Почему нельзя просто добавить partitions без анализа ключей?

Разбор темы

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

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

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

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

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