web-dev-qa-db-fra.com

Quelles sont les différences entre KTable vs GlobalKTable et Join gauche () vs jointure externe ()?

Dans Kafka Stream library, je veux connaître la différence entre KTable et GlobalKTable.

Toujours dans la classe KStream, il existe deux méthodes leftJoin() et outerJoin(). Quelle est également la différence entre ces deux méthodes?

J'ai lu KStream.leftJoin , mais je n'ai pas réussi à trouver une différence exacte.

13
Ajit Dongre

KTable VS GlobalKTable

Un KTable partage les données entre toutes les instances Kafka Streams en cours d'exécution, tandis qu'un GlobalKTable a une copie complète de toutes les données sur chaque instance. L'inconvénient de GlobalKTable est qu'il a évidemment besoin de plus de mémoire. L'avantage est que vous pouvez faire une jointure KStream-GlobalKTable avec un attribut non clé du flux. Pour une jointure KStream-KTable et un attribut de flux non clé pour le join n'est possible qu'en extrayant l'attribut join et en le définissant comme clé avant de faire la jointure - cela entraînera une étape de repartitionnement du flux avant que la jointure puisse être calculée.

Notez cependant qu'il existe également une différence sémantique: pour la jointure de table de flux, Kafka Stream aligner le traitement des enregistrements ordonné en fonction des horodatages des enregistrements. Ainsi, la mise à jour de la table est alignée avec les enregistrements de Pour GlobalKTable, il n'y a pas de synchronisation horaire et donc mettez à jour vers GlobalKTable et complètement découplé du traitement des enregistrements de flux (ainsi, vous obtenez une sémantique plus faible).

Pour plus de détails, voir KIP-99: Ajouter des tables globales à Kafka Streams .

leftJoin () VS externeJoin ()

A propos des jointures gauche et externe: c'est comme dans une base de données une jointure externe gauche et externe complète, respectivement.

Pour une jointure externe gauche, vous risquez de "perdre" les données de votre flux d'entrée droit au cas où il n'y aurait pas de correspondance pour la jointure sur le côté gauche.

Pour une jointure externe (complète), aucune donnée ne sera supprimée et chaque enregistrement d'entrée des deux flux sera dans le flux de résultats.

26
Matthias J. Sax