Wszystkie przykłady z Kafki | producenci pokazują, że ProducerRecord
para klucz / wartość nie tylko jest tego samego typu (wszystkie przykłady pokazują <String,String>
), ale ma tę samą wartość . Na przykład:
producer.send(new ProducerRecord<String, String>("someTopic", Integer.toString(i), Integer.toString(i)));
Ale w dokumentach Kafka nie mogę znaleźć miejsca, w którym wyjaśniono koncepcję klucz / wartość (i jej podstawowy cel / użyteczność). W tradycyjnych wiadomościach (ActiveMQ, RabbitMQ, itp.) Zawsze wysyłałem wiadomość na określony temat / kolejkę / wymianę. Ale Kafka jest pierwszym brokerem, który wydaje się wymagać par klucz / wartość zamiast zwykłej wiadomości tekstowej.
Więc pytam: jaki jest cel / przydatność wymagania od producentów wysyłania par KV?
KStream
iKTable
- patrz tutaj .partition
parametr, będzie on używany, a klucz będzie „ignorowany” (lub oczywiście klucz nadal będzie wpisany w temacie). - Dzięki temu możesz mieć niestandardowe partycjonowanie, nawet jeśli masz klucze.Późne dodawanie ... Określenie klucza tak, aby wszystkie komunikaty z tego samego klucza trafiały do tej samej partycji, jest bardzo ważne dla prawidłowego uporządkowania przetwarzania komunikatów, jeśli w grupie odbiorców będzie wielu odbiorców na dany temat.
Bez klucza dwie wiadomości na tym samym kluczu mogłyby trafić do różnych partycji i zostać przetworzone przez różnych odbiorców w grupie poza kolejnością.
źródło
Kolejny interesujący przypadek użycia
Moglibyśmy użyć atrybutu klucza w tematach Kafki do wysyłania user_ids, a następnie możemy podłączyć konsumenta do pobierania zdarzeń przesyłania strumieniowego (zdarzeń przechowywanych w atrybutach wartości). Może to umożliwić przetwarzanie dowolnej maksymalnej historii sekwencji zdarzeń użytkownika w celu tworzenia funkcji w modelach uczenia maszynowego.
Nadal muszę się dowiedzieć, czy jest to możliwe, czy nie. Będzie aktualizować moją odpowiedź o dalsze szczegóły.
źródło