Wat is het doel van Kafka’s op sleutel/waarde-paar gebaseerde berichten?

Alle voorbeeldenvan Kafka| producententonen het sleutel/waarde-paar van ProducerRecordals niet alleen van hetzelfde type zijn (alle voorbeelden tonen <String,String>), maar dezelfde waarde. Bijvoorbeeld:

producer.send(new ProducerRecord<String, String>("someTopic", Integer.toString(i), Integer.toString(i)));

Maar in de Kafka-documenten kan ik niet vinden waar het sleutel/waarde-concept (en het onderliggende doel/nut) wordt uitgelegd. In traditionele berichtenuitwisseling (ActiveMQ, RabbitMQ, enz.) heb ik altijd een bericht verzonden naar een bepaald onderwerp/wachtrij/uitwisseling. Maar Kafka is de eerste makelaar die sleutel/waarde-paren lijkt te vereisen in plaats van alleen een normaal ‘ole string-bericht.

Dus ik vraag: Wat is het doel/het nut van het verplichten van producenten om KV-paren te sturen?


Antwoord 1, autoriteit 100%

Kafka gebruikt de abstractie van een gedistribueerd logdat bestaat uit partities. Door een log in partities te splitsen, kan het systeem worden uitgeschaald.

Toetsenworden gebruikt om de partitie in een log te bepalen waaraan een bericht wordt toegevoegd. Terwijl de waarde de werkelijke lading van het bericht is. De voorbeelden zijn in dit opzicht eigenlijk niet erg “goed”; meestal zou je een complex type als waarde hebben (zoals een tuple-type of een JSON of iets dergelijks) en zou je één veld als sleutel extraheren.

Zie: http://kafka.apache.org/intro#intro_topicsen http://kafka.apache.org/intro#intro_producers

Over het algemeen kan de sleutel en/of waarde ook nullzijn. Als de sleutel nullis, wordt een willekeurige partitie geselecteerd. Als de waarde nullis, kan het kaneen speciale “delete”-semantiek hebben voor het geval u log-compaction inschakelt in plaats van log-retentiebeleid voor een onderwerp (http://kafka.apache.org/documentation#compaction).


Antwoord 2, autoriteit 24%

Late toevoeging… Het specificeren van de sleutel zodat alle berichten op dezelfde sleutel naar dezelfde partitie gaan is erg belangrijk voor de juiste volgorde van berichtverwerking als je meerdere consumenten in een consumentengroep over een onderwerp hebt.

Zonder een sleutel kunnen twee berichten op dezelfde sleutel naar verschillende partities gaan en door verschillende consumenten in de groep worden verwerkt.


Antwoord 3

Nog een interessante use-case

We zouden het key-attribuut in Kafka-onderwerpen kunnen gebruiken voor het verzenden van user_ids en vervolgens een consument kunnen aansluiten om streaminggebeurtenissen op te halen (gebeurtenissen die zijn opgeslagen in waardeattributen). Hierdoor kunt u elke maximale geschiedenis van reeksen van gebruikersgebeurtenissen verwerken voor het maken van functies in uw machine learning-modellen.

Ik moet nog uitzoeken of dit mogelijk is of niet. Zal mijn antwoord blijven updaten met meer details.

Other episodes