49 votes

Akka Stream Kafka vs Kafka Streams

Je suis actuellement en train de travailler avec Akka Flux de Kafka à interagir avec kafka et j'ai été questionnement quelles étaient les différences avec Kafka Flux.

Je sais que la Akka approche fondée sur les implémente le réactif de spécifications et de poignées de contre-pression, la fonctionnalité que kafka flux de semble manquer.

Quel serait l'avantage de l'utilisation de kafka cours d'eau akka flux de kafka?

50voto

Frederic A. Points 2979

Votre question est très générale, donc je vais donner une réponse générale, de mon point de vue.

Tout d'abord, j'ai deux scénario d'utilisation:

  1. les cas où je suis en train de lire des données à partir de kafka, le traitement et l'écriture sur la sortie arrière de kafka, pour ces je suis l'aide de kafka flux exclusivement.
  2. les cas où les données de source ou de puits n'est pas kafka, pour ceux que je suis en utilisant akka ruisseaux.

Déjà ça me permet de répondre à la partie sur la contre-pression: pour le 1er scénario ci-dessus, il y a une contre-pression mécanisme de kafka ruisseaux.

Il est maintenant temps de se concentrer uniquement sur le premier scénario décrit ci-dessus. Voyons voir ce que je perdrait si j'ai décidé d'arrêter l'utilisation de Kafka flux:

  • certains de mes processeurs de flux étapes besoin d'un persistants (distribué) magasin d'état, kafka flux constitue pour moi. C'est quelque chose qui akka flux ne fournit pas.
  • mise à l'échelle, kafka flux automatiquement l'équilibrage de la charge dès qu'une nouvelle instance d'un flux processeur est commencé, ou dès que l'on se fait tuer. Cela fonctionne à l'intérieur de la même JVM, ainsi que sur d'autres nœuds: mise à l'échelle vers le haut. Ce n'est pas fournie par akka ruisseaux.

Ces différences sont plus importants pour moi, je suis en espérant que cela fait sens pour vous!

5voto

vgkowski Points 329

Le gros avantage d'Akka Stream par rapport aux Kafka Streams serait la possibilité d'implémenter des graphes de traitement très complexes pouvant être cycliques avec un ventilateur en entrée / sortie et une boucle de retour. Les flux Kafka ne permettent les graphes acycliques que si je ne me trompe pas. Il serait très compliqué d'implémenter un graphe de traitement cyclique au dessus des flux de Kafka

2voto

SemanticBeeng Points 607

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X