Alle Beispiele von Kafka | Produzenten zeigen, dass das ProducerRecord
Schlüssel / Wert-Paar nicht nur vom selben Typ ist (alle Beispiele zeigen <String,String>
), sondern auch vom selben Wert . Zum Beispiel:
producer.send(new ProducerRecord<String, String>("someTopic", Integer.toString(i), Integer.toString(i)));
Aber in den Kafka-Dokumenten kann ich anscheinend nicht finden, wo das Schlüssel- / Wertekonzept (und sein zugrunde liegender Zweck / Nutzen) erklärt wird. Bei herkömmlichen Nachrichten (ActiveMQ, RabbitMQ usw.) habe ich immer eine Nachricht zu einem bestimmten Thema / einer bestimmten Warteschlange / einem bestimmten Austausch ausgelöst. Aber Kafka ist der erste Broker, der Schlüssel / Wert-Paare anstelle einer regulären alten String-Nachricht zu benötigen scheint.
Also frage ich: Was ist der Zweck / Nutzen der Verpflichtung von Produzenten, KV-Paare zu senden?
KStream
undKTable
- siehe hier .partition
Parameter angeben , wird er verwendet und der Schlüssel wird "ignoriert" (oder natürlich wird der Schlüssel weiterhin in das Thema geschrieben). - Dies ermöglicht Ihnen eine angepasste Partitionierung, auch wenn Sie Schlüssel haben.Spätes Hinzufügen ... Die Angabe des Schlüssels, damit alle Nachrichten auf demselben Schlüssel auf dieselbe Partition gehen, ist für die ordnungsgemäße Reihenfolge der Nachrichtenverarbeitung sehr wichtig, wenn Sie mehrere Verbraucher in einer Verbrauchergruppe zu einem Thema haben.
Ohne einen Schlüssel könnten zwei Nachrichten auf demselben Schlüssel zu unterschiedlichen Partitionen gehen und von verschiedenen Verbrauchern in der Gruppe außer Betrieb verarbeitet werden.
quelle
Ein weiterer interessanter Anwendungsfall
Wir könnten das Schlüsselattribut in Kafka-Themen zum Senden von Benutzer-IDs verwenden und dann einen Verbraucher anschließen, um Streaming-Ereignisse (Ereignisse, die in Wertattributen gespeichert sind) abzurufen. Auf diese Weise können Sie eine beliebige maximale Anzahl von Benutzerereignissequenzen verarbeiten, um Funktionen in Ihren Modellen für maschinelles Lernen zu erstellen.
Ich muss noch herausfinden, ob dies möglich ist oder nicht. Ich werde meine Antwort mit weiteren Details aktualisieren.
quelle