События одного заказа приходят не в том порядке
Топик Kafka order-events имеет 6 партиций, продюсер публикует сообщения без ключа. Группа потребителей из 6 экземпляров обрабатывает события заказов.
В проде регулярно ловят ошибку: OrderPaid обрабатывается раньше, чем OrderCreated по тому же заказу, и обработчик падает на отсутствующем заказе.
Что нужно изменить?
- Kafka гарантирует порядок в пределах топика, значит дело в потребителях: нужно увеличить их количество, чтобы они не отставали друг от друга
- Публиковать события с ключом, равным идентификатору заказа: все события одного заказа попадут в одну партицию
- Оставить в топике одну партицию — иного способа сохранить порядок событий не существует
- Включить транзакции продюсера: они упорядочат сообщения между партициями
