Какая гарантия порядка в Kafka является базовой?
- Как сохранить порядок событий одного заказа в Kafka?
Kafka гарантирует порядок только внутри партиции. Чтобы события одного заказа шли по порядку, у них должен быть одинаковый ключ (order_id) — тогда они попадут в одну партицию.
- Между партициями порядка нет
- Повторы продюсера могут переставить сообщения — нужна идемпотентность (
enable.idempotence=true) - Увеличение числа партиций меняет партицию для ключа — порядок ломается на переходе
А ещё Глобальный порядок — только одна партиция, без параллелизма
Подробно
Гарантия. Сообщения в партицию дописываются по порядку, и потребитель читает их в том же порядке. Для сообщений в разных партициях порядок не определён: потребители читают их параллельно.
Как сохранить порядок для сущности — ключ сообщения: продюсер выбирает партицию по хешу ключа, и все события с ключом order:42 идут в одну партицию.
Что может нарушить:
- повторы продюсера — при
max.in.flight.requests.per.connection > 1и повторах без идемпотентности второй батч может записаться раньше повторённого первого. Идемпотентный продюсер (по умолчанию с Kafka 3.0) сохраняет порядок при до 5 запросов в полёте; - увеличение числа партиций —
hash(key) % Nменяется, новые события ключа идут в другую партицию, пока старые ещё не обработаны; - параллельная обработка внутри потребителя — если обрабатывать сообщения партиции в пуле потоков без группировки по ключу;
- повторы через retry-топики — сообщение уходит на повтор, следующее за ним обрабатывается раньше.
Что хотят услышать
- Порядок только в партиции.
- Ключ сообщения для сохранения порядка сущности.
- Что нарушает порядок.
Частые ошибки
- Ожидать глобального порядка в топике.
- Отправлять события сущности без ключа.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Глобальный порядок всех сообщений во всех topics
- ✓Порядок сообщений внутри одной partition
- ✗Порядок только между разными consumer groups топика
- ✗Kafka вообще не даёт никаких гарантий порядка
Что спросят дальше
- Как обеспечить порядок событий одного пользователя?
- Почему нельзя просто добавить partitions без анализа ключей?
Разбор темы
- Kafka: topic, partition, offset
Распределённый append-only лог, партиция как единица масштаба и упорядоченности, ключ и порядок, retention и log compaction, replay.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.