Sobes.tech
Middle+

Warum erhalten Kafka-Consumer das Ereignis 'Bestellung ausgeliefert' vor dem Ereignis 'Bestellung erstellt'? Wie kann man das beheben?

sobes.tech KI

Antwort von AI

Такое поведение обычно связано с тем, что сообщения в Kafka могут попадать в разные партиции и потребители читают их параллельно, из-за чего порядок доставки не гарантируется между разными ключами или партициями. Если события "заказ создан" и "заказ выдан" публикуются в разные партиции или без ключа, то потребитель может получить событие "заказ выдан" раньше.

Чтобы исправить ситуацию и гарантировать порядок событий для одного заказа, нужно:

  • Использовать ключ сообщения (например, ID заказа) при публикации, чтобы все события по одному заказу попадали в одну и ту же партицию.
  • Настроить потребителя так, чтобы он читал сообщения из партиций последовательно.

Пример на Go при отправке сообщений с ключом:

producerMessage := &kafka.Message{
    Key:   []byte(orderID), // ключ для партиционирования
    Value: []byte(eventData),
}
producer.Produce(producerMessage, nil)

Таким образом, Kafka гарантирует порядок сообщений внутри одной партиции, и потребитель получит события в правильном порядке.