Если вы не определили ключ на стороне производителя, kafka сгенерирует сообщение в каждом разделе за раз.Создание данных по кругу [код здесь] .
Пример, если у вас есть 2 раздела:
msg_1 -> partition: 0
msg_2 -> partition: 1
msg_3 -> partition: 0
msg_4 -> partition: 1
Проблему сделать это вы не можетеобеспечить порядок в другой стороне, поскольку потребляемые сообщения могут потребляться в разное время на раздел.Представьте, что у вас есть сообщение со смещением 1 в разделе 0, а второе сообщение со смещением 1 в разделе 1. Потребитель Kafka может начать потреблять сообщения из раздела 1, прежде чем перейдет в раздел 0.
Чтобы избежать этой проблемы, всегда следуетИспользуйте тот же ключ для сообщений, которые вам нужны заказ.Единственный способ решить эту проблему сейчас - это создать хранилище состояний и проверять состояние вашего документа каждый раз, когда вам нужно его прочитать.
Если вы настроите ключ, вы всегда будете отправлять ключ в один и тот же раздел, единственный способ получить другой заказ - на стороне производителя, но это будет условие гонки.Случай с нарушенным заказом возможен только в том случае, если два производителя производят один и тот же ключ одновременно.Вы можете проверить логику здесь .