101 votes

Je suis en train d'évaluer Google Pub/Sub par rapport à Kafka. Quelles sont les différences ?

Je n'ai pas beaucoup travaillé sur kafka mais je voulais construire un pipeline de données dans GCE. Nous voulions donc connaître Kafka vs PUB/Sub. En fait, je veux savoir comment la cohérence, la disponibilité et la fiabilité des messages sont maintenues dans Kafka et Pub/Sub.

Merci

9 votes

112voto

gunit Points 919

En plus du fait que Google Pub/Sub est géré par Google et que Kafka est open source, l'autre différence est que Google Pub/Sub est une file d'attente de messages (par exemple Rabbit MQ) alors que Kafka est plus un journal de streaming. Il n'est pas possible de "relire" ou de "rejouer" les messages avec Pubsub (EDIT - à partir de février 2019, il est possible de rejouer les messages et de remonter dans le temps jusqu'à un certain horodatage, selon le commentaire ci-dessous).

Avec Google Pub/Sub, une fois qu'un message est lu dans un abonnement et qu'il a été acquitté, il disparaît. Afin d'avoir plus de copies d'un message à lire par différents lecteurs, vous "fan-out" le sujet en créant des "abonnements" pour ce sujet, où chaque abonnement aura une copie complète de tout ce qui va dans le sujet. Mais cela augmente également les coûts car Google facture l'utilisation de Pub/Sub en fonction de la quantité de données lues.

Avec Kafka, vous définissez une période de rétention (je crois que c'est 7 jours par défaut) et les messages restent dans Kafka quel que soit le nombre de consommateurs qui les lisent. Vous pouvez ajouter un nouveau consommateur (alias abonné), et le faire commencer à consommer depuis le début du sujet quand vous le souhaitez. Vous pouvez également définir une période de rétention infinie et utiliser Kafka comme une base de données immuable, comme décrit ici : http://stackoverflow.com/a/22597637/304262

Amazon AWS Kinesis est une version gérée de Kafka, tandis que je considère Google Pubsub comme une version gérée de Rabbit MQ. Amazon SNS avec SQS est également similaire à Google Pubsub (SNS fournit le fanout et SQS fournit la mise en file d'attente).

5 votes

La relecture est une fonctionnalité essentielle dans la plupart des architectures orientées événements. En outre, Kafka ajoute un numéro de séquence aux messages et devient donc la source de séquence faisant autorité.

4 votes

La façon d'accomplir la "relecture" avec un système de file d'attente de messages comme PubSub est de faire un fan-out du sujet vers plus d'abonnements (c'est-à-dire faire plus de copies des messages), et chaque consommateur consomme son propre abonnement à son propre rythme. Je suppose que vous pouvez avoir un abonnement qui est juste destiné à être rejoué quand vous en avez besoin. Pour faire la même chose avec Kafka, il faudrait créer un nouveau consommateur et commencer à consommer depuis le début (puisque Kafka ne fait pas de copie des messages, il donne simplement à chaque consommateur son propre offset "pointeur" pour garder la trace de ce qui a déjà été lu).

7 votes

Kinesis peut être considéré comme un service géré qui est sémantiquement similaire à Kafka, mais il est inexact de dire qu'il s'agit d'une "version gérée de Kafka". Pour un véritable "Kafka géré", voir Confluent Cloud. confluent.io/confluent-cloud

29voto

dbustosp Points 1120

J'ai lu les réponses ci-dessus et je voudrais les compléter, car je pense qu'il y a quelques détails en suspens :

Système entièrement géré Les deux systèmes peuvent avoir une version entièrement gérée dans le nuage. Google fournit Pubsub et il existe des versions de Kafka entièrement gérées que vous pouvez configurer sur le site Web de Google. Cloud et sur site .

Cloud ou sur site Je pense qu'il s'agit d'une véritable différence entre eux, car Pubsub n'est proposé que dans le cadre de l'écosystème GCP, alors qu'Apache Kafka peut être utilisé à la fois comme service en nuage et comme service sur site (en configurant vous-même le cluster).

Duplication des messages - Avec Kafka, vous devrez gérer les offsets des messages par vous-même, en utilisant un stockage externe, tel que Apache Zookeeper. De cette façon, vous pouvez suivre les messages lus jusqu'à présent par les consommateurs. Pubsub fonctionne en utilisant l'accusé de réception du message, si votre code n'accuse pas réception du message avant la date limite, le message est envoyé à nouveau, de cette façon vous pouvez éviter les messages dupliqués ou une autre façon d'éviter est d'utiliser Cloud Dataflow PubsubIO.

Politique de conservation Kafka et Pubsub ont tous deux des options pour configurer le temps de rétention maximum, par défaut, je pense que c'est 7 jours.

Groupe de consommateurs contre abonnements Faites attention à la façon dont vous lisez les messages dans les deux systèmes. Pubsub utilise des abonnements, vous créez un abonnement et ensuite vous commencez à lire les messages de cet abonnement. Une fois qu'un message a été lu et acquitté, le message de cet abonnement disparaît. Kafka utilise le concept de "groupe de consommateurs" et de "partition", chaque processus consommateur appartient à un groupe et lorsqu'un message est lu à partir d'une partition spécifique, tout autre processus consommateur appartenant au même "groupe de consommateurs" ne sera pas en mesure de lire ce message (parce que le décalage augmentera éventuellement). Vous pouvez voir le décalage comme un pointeur qui indique aux processus quel message doit être lu.

Je pense qu'il n'y a pas de réponse correcte à votre question, cela dépendra vraiment de ce dont vous aurez besoin et des contraintes que vous avez (ci-dessous quelques exemples d'escenarios) :

  • Si la solution doit être dans GCP, utilisez évidemment Google Cloud Pubsub. Vous éviterez tous les efforts de paramétrage ou de paiement supplémentaire pour un système entièrement automatisé que Kafka exige.

  • Si la solution doit traiter les données en mode streaming mais doit également prendre en charge le traitement par lots (à terme), il est judicieux d'utiliser Cloud Dataflow + Pubsub.

  • Si la solution nécessite l'utilisation de traitements Spark, vous pouvez explorer Spark Streaming (qui permet de configurer Kafka pour le traitement des flux).

En général, les deux sont des systèmes de traitement de flux très solides. Le point qui fait l'énorme différence est que Pubsub est un service en nuage rattaché à GCP alors qu'Apache Kafka peut être utilisé à la fois en nuage et sur site.

Mise à jour (6 avril 2021) :

5 votes

Je pense que cela peut être trompeur ; A moins que vous ne vouliez écrire votre propre bibliothèque sur le protocole filaire de Kafka, les clients existants fournissent déjà des mécanismes configurables pour gérer l'engagement des offsets. De plus, les offsets engagés ne sont pas conservés dans Zookeeper mais dans un sujet spécial "__consumer_offsets" qui est répliqué parmi les brokers. C'est une bonne lecture : confluent.io/blog/

2 votes

En effet, je ne comprends vraiment pas votre déclaration concernant le stockage manuel des décalages : With Kafka you will need to manage the offsets of the messages by yourself, using an external storage, such as, Apache Zookeeper => Downvoting

14voto

Mete Atamel Points 358

Une grande différence entre Kafka et Cloud Pub/Sub est que Cloud Pub/Sub est entièrement géré pour vous. Vous n'avez pas à vous soucier des machines, de la mise en place des clusters, du réglage fin des paramètres, etc., ce qui signifie qu'une grande partie du travail DevOps est prise en charge pour vous, ce qui est important, surtout lorsque vous devez évoluer.

13 votes

Ce n'est pas vraiment une différence car il existe de nombreux fournisseurs qui proposent Kafka en tant que service entièrement géré également. La différence réside peut-être dans le fait que Google PubSub n'est disponible qu'en tant que service dans Googles Cloud. Il n'existe donc pas de version on prem ni de service géré dans d'autres fournisseurs de clouds comme AWS ou Azure.

2 votes

"Google PubSub n'est disponible qu'en tant que service dans Google Cloud". C'est inexact... votre application n'est pas obligée d'être déployée dans Google App Engine... vous pouvez vous connecter et publier sur GooglePub/Sub" depuis n'importe quel client, à condition de vous y connecter de manière sécurisée via un "compte de service".

17 votes

@JerylCook Je pense qu'il veut juste dire que vous ne pouvez pas installer la pub/sub de google sur prem.

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