Lors de la définition d'une topologie dans les flux kafka, un magasin d'état global peut être ajouté. Il aura besoin d'un sujet source ainsi que d'un ProcessorSupplier
. Le processeur reçoit des enregistrements et pourrait les transformer théoriquement avant d'y ajouter au magasin. Mais en cas de restauration, les enregistrements sont directement insérés du sujet source (Changelog) dans le magasin d'état global, sautant une transformation éventuelle effectuée dans le processeur.
+-------------+ +-------------+ +---------------+
| | | | | global |
|source topic -------------> processor +--------------> state |
|(changelog) | | | | store |
+-------------+ +-------------+ +---------------+
| ^
| |
+---------------------------------------------------------+
record directly inserted during restoration
StreamsBuilder # Addglobalstore (StoreBuilder StoreBuilder, Sujet de cordes, consommé consommé, ProcessorSuplicateur StateUpdateSupplier) Ajoute une Statetore globale à la topologie.
Selon la documentation
Remarque: Vous ne devez pas utiliser le processeur sur Insérer des enregistrements transformés dans le magasin d'état global . Ce magasin utilise le sujet source que Changelog et pendant la restauration insérera des enregistrements directement à partir de la source . Ce processus doit être utilisé pour maintenir le Statetore à jour.
En parallèle comme un bug majeur est actuellement ouvert sur le suivi de bogues kafka: le processeur personnalisé KAFKA-7663 fourni sur Addglobalstore n'est pas utilisé lors de la restauration de l'état de sujet qui explique exactement ce qui est indiqué dans la documentation , mais semble être un bug accepté.
Je me demande si Kafka-7663 est en effet un bug ou non. Selon la documentation, il semble avoir été conçu comme celui-ci, auquel cas j'ai du mal à comprendre le cas d'utilisation.
[.____] Quelqu'un peut-il expliquer les principaux cas d'utilisation de cette API de faible niveau? Seule une chose que je peux penser est de traiter les effets secondaires, comme par exemple, de faire des opérations de journal dans le processeur.
Question de bonus: Si le sujet de la source agit en tant que ChangeLog of the Global Store, lorsqu'un enregistrement est supprimé du sujet, car la rétention a expiré, sera-t-elle supprimée du magasin d'État global? Ou la suppression n'aura lieu que dans le magasin après une restauration complète de magasin de Changelog.
À l'heure actuelle, il ne semble pas y avoir un moyen d'écouter des changements sur une kglobaltable.
Vous pouvez obtenir un résultat similaire avec un magasin global et un processeur personnalisé.
J'ai trébuché sur ceci Comment être informé des mises à jour de l'état de magasin de globalktable?
Je ne discute pas que c'est un bon Utilisez un cas, mais comme solution de contournement, cela peut être utile.