Как работает порядок в Kafka?
По умолчанию: продюсер отправляет сообщение, лидер партиции записывает его, реплики синхронизируются асинхронно. Если лидер падает, выбирается новый лидер из реплик. Если старый лидер успел записать сообщение, но новые реплики его не получили, это сообщение теряется. Новый лидер продолжает запись с другого смещения. В результате для одного ключа
order_id могут быть пропуски или перестановка.Что нужно настроить?
acks=all — продюсер ждёт подтверждения от всех синхронных реплик (ISR).min.insync.replicas — минимальное количество реплик, которые должны подтвердить запись (обычно 2). При min.insync.replicas=2 и replication.factor=3 запись успешна, если хотя бы 2 реплики в ISR.Почему это сохраняет порядок?
Если старая реплика отстала, она не входит в ISR, и запись не произойдёт до тех пор, пока она не догонит. Таким образом, лидер не теряет сообщения, и порядок сохраняется даже при смене лидера.
Реальный пример: В одной компании из-за отсутствия
min.insync.replicas события одного заказа (создан → оплачен → отгружен) поменяли порядок на «отгружен → оплачен». Клиенты получали товар без списания денег.Вывод: Аналитик в требованиях должен указать: «Для гарантированного порядка и отказоустойчивости использовать
acks=all, min.insync.replicas=2, replication.factor=3».