Sobes.tech
Senior

Jak sprawić, aby wszystkie zdarzenia dotyczące jednego zamówienia trafiały do jednej partycji Kafka?

sobes.tech AI

Odpowiedź od AI

Aby wszystkie zdarzenia związane z jednym zamówieniem trafiały do jednej partycji Kafka, należy użyć klucza (key) podczas wysyłania wiadomości, który jednoznacznie identyfikuje zamówienie.

Kafka używa klucza do obliczenia partycji za pomocą funkcji hash. Jeśli dla wszystkich zdarzeń tego samego zamówienia użyje się tego samego klucza (np. order_id), to trafią one do tej samej partycji.

Przykład w Go z użyciem sarama (popularny klient Kafka):

producer.Input() <- &sarama.ProducerMessage{
    Topic: "orders",
    Key:   sarama.StringEncoder(orderID), // orderID — identyfikator zamówienia
    Value: sarama.StringEncoder(eventData),
}

W ten sposób gwarantuje się, że wszystkie zdarzenia z tym samym kluczem będą w jednej partycji, co jest ważne dla uporządkowanego przetwarzania i spójności.