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) :
9 votes
Ce n'est pas exactement ce que vous recherchez, mais cela pourrait vous intéresser. Le voyage de Spotify vers le cloud : pourquoi Spotify a migré son système de diffusion d'événements de Kafka à Google Cloud Pub/Sub