Producer настроен с retries и несколькими запросами в полёте одновременно. Чем это грозит порядку сообщений и как решается?
- Почему повторы продюсера ломают порядок?
С несколькими запросами в полёте пакет 1 может упасть и уйти на повтор, а пакет 2 уже записан — порядок нарушен. Идемпотентный продюсер сохраняет порядок при max.in.flight ≤ 5 за счёт номеров последовательности.
- Без идемпотентности — max.in.flight=1, ценой пропускной способности
- Брокер отклоняет пакет с пропуском номера, и продюсер повторяет по порядку
- Идемпотентность включена по умолчанию с Kafka 3.0
А ещё Порядок всё равно только внутри партиции
Подробно
Механика проблемы: первый батч упал по таймауту и ушёл в повтор, второй тем временем записался — итоговый порядок в партиции перевернулся. Исторически лечили ограничением до одного запроса в полёте, что резало пропускную способность. Идемпотентный producer снимает компромисс: брокер отслеживает идентификатор producer и номер последовательности для каждой партиции, отбрасывает дубли и отвергает записи, пришедшие не по порядку, поэтому несколько запросов в полёте остаются безопасными. Полезно помнить и границы гарантии: порядок и дедупликация действуют в пределах партиции и сессии producer, а не глобально по топику.
Что хотят услышать
- Сценарий перестановки.
- Как идемпотентный продюсер сохраняет порядок.
- Альтернатива max.in.flight=1 и её цена.
Частые ошибки
- Считать порядок в Kafka глобальным по топику.
- Отключать идемпотентность и одновременно держать много запросов в полёте.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Порядок гарантирован всегда независимо от настроек
- ✗Порядок нарушится необратимо, восстановить его невозможно
- ✗Решение одно — max.in.flight=1, идемпотентность на порядок никак не влияет и только защищает от дублей
- ✓Ретрай может обогнать следующий запрос; порядок сохраняет идемпотентный producer
Что спросят дальше
- Что даёт транзакционный producer сверх идемпотентного?
- Как ключ сообщения связан с гарантией порядка?
Разбор темы
- Kafka Producer
Запись и сериализация, выбор партиции, батчинг и сжатие, acks и долговечность, идемпотентный producer и транзакции.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.