Trouvé cet article pour donner un bon résumé de la conception distribuée préoccupations Kafka Streams
offre (compléments Akka Streams
).
https://www.beyondthelines.net/computing/kafka-streams/
message de commande: Kafka maintient une sorte d'ajouter que le journal où elle stocke tous les messages, Chaque message a un id de séquence aussi connu sous le nom de décalage. Le décalage est utilisé pour indiquer la position d'un message dans le journal. Kafka flux utilise ces message de compensations pour maintenir la commande.
partitionnement: Kafka divise un sujet en partitions et chaque partition est répliqué entre les différents courtiers. Le partitionnement permet de répartir la charge et la réplication du fait de l'application à tolérance de pannes (si un courtier est en panne, les données sont encore disponibles). C'est bon pour le partitionnement des données, mais nous avons également besoin de distribuer les processus d'une manière similaire. Kafka Flux utilise le processeur de la topologie, qui s'appuie sur Kafka la gestion de groupe. C'est le même groupe de gestion qui est utilisé par le Kafka de consommation de distribuer la charge uniformément parmi les courtiers (Ce travail est principalement géré par les courtiers).
Tolérance de panne: réplication des données garantit que les données de tolérance de pannes. La gestion du groupe a de la tolérance de panne intégré comme il redistribue la charge de travail entre en restant courtier live instances.
La gestion de l'état: Kafka cours d'eau fournit un stockage local soutenu par un kafka change-log sujet qui utilise le journal de compactage (conserve uniquement la dernière valeur pour une clé donnée).Kafka, journal de compactage
Retraitement: Lors du démarrage d'une nouvelle version de l'application, on peut retraiter les journaux depuis le début de calculer de nouvelles de l'état puis de rediriger le trafic de la nouvelle instance et de l'arrêt de l'ancienne application.
Gestion du temps: "les Flux de données n'est jamais complète, et il peut toujours arriver en dehors-de-commande" donc on doit distinguer l'heure de l'événement vs traitées à temps et de les traiter correctement.
L'auteur dit aussi "à l'Aide de ce change-log sujet Kafka Flux est capable de maintenir une "table view" de l'état de l'application."
De mon point de vue est que cela s'applique principalement à une application d'entreprise où la "demande d'état" est ... petit.
Pour une science des données de demande de travail avec les "big data", la "demande d'état", produit par une combinaison de données munging, l'apprentissage automatique de modèles d'affaires et de logique pour orchestrer tout cela ne sera probablement pas su Kafka Streams
.
Aussi, pense que l'utilisation d'un "pur fonctionnel event sourcing d'exécution" comme https://github.com/notxcain/aecor aidera à faire des mutations explicite et distincte de la logique de l'application de la technologie utilisée pour gérer la persistance de l'état à travers les principes de la gestion de l'etat et de mutation des IO "effets" (programmation fonctionnelle).
En d'autres termes, la logique d'entreprise de ne pas s'emmêler avec l' Kafka
api.