Ich habe die obigen Antworten gelesen und möchte sie ergänzen, da ich denke, dass einige Details noch ausstehen:
Vollständig verwaltetes System Beide Systeme können eine vollständig verwaltete Version in der Cloud haben. Google bietet Pubsub an und es gibt einige vollständig verwaltete Kafka-Versionen, die Sie in der Cloud und vor Ort konfigurieren können .
Cloud vs On-Prem Ich denke, dies ist ein echter Unterschied zwischen ihnen, da Pubsub nur als Teil des GCP-Ökosystems angeboten wird, während Apache Kafka sowohl als Cloud-Dienst als auch als On-Prem-Dienst verwendet werden kann (die Cluster-Konfiguration selbst vornehmen).
Duplizieren von Nachrichten
- Mit Kafka müssen Sie die Offsets der Nachrichten mithilfe eines externen Speichers wie Apache Zookeeper selbst verwalten. Auf diese Weise können Sie die bisher von den Verbrauchern gelesenen Nachrichten verfolgen. Pubsub verwendet die Bestätigung der Nachricht. Wenn Ihr Code die Nachricht nicht vor Ablauf der Frist bestätigt, wird die Nachricht erneut gesendet. Auf diese Weise können Sie doppelte Nachrichten vermeiden oder Cloud Dataflow PubsubIO auf andere Weise vermeiden.
Aufbewahrungsrichtlinien Sowohl Kafka und Pubsub haben Optionen , um die maximale Haltezeit zu konfigurieren, standardmäßig, ich glaube , 7 Tage.
Verbrauchergruppe vs Abonnements Achten Sie darauf, wie Sie Nachrichten in beiden Systemen lesen. Pubsub verwendet Abonnements, Sie erstellen ein Abonnement und beginnen dann, Nachrichten aus diesem Abonnement zu lesen. Sobald eine Nachricht gelesen und bestätigt wurde, ist die Nachricht für dieses Abonnement nicht mehr vorhanden. Kafka verwendet das Konzept "Verbrauchergruppe" und "Partition". Jeder Verbraucherprozess gehört zu einer Gruppe. Wenn eine Nachricht von einer bestimmten Partition gelesen wird, kann kein anderer Verbraucherprozess zu derselben "Verbrauchergruppe" um diese Nachricht zu lesen (das liegt daran, dass der Offset irgendwann zunimmt). Sie können den Offset als Zeiger sehen, der den Prozessen mitteilt, welche Nachricht gelesen werden muss.
Ich denke, es gibt keine richtige Antwort auf Ihre Frage, es hängt wirklich davon ab, was Sie brauchen und welche Einschränkungen Sie haben (nachfolgend einige Beispiele für die Escenarios):
Wenn die Lösung in GCP sein muss, verwenden Sie natürlich Google Cloud Pubsub. Sie vermeiden alle Einstellungsbemühungen oder zahlen extra für ein vollautomatisches System, das Kafka benötigt.
Wenn die Lösung Prozessdaten auf Streaming-Weise erfordern sollte, aber (möglicherweise) auch die Stapelverarbeitung unterstützen muss, ist es eine gute Idee, Cloud Dataflow + Pubsub zu verwenden.
Wenn für die Lösung eine Spark-Verarbeitung erforderlich ist, können Sie das Spark-Streaming untersuchen (das Sie Kafka für die Stream-Verarbeitung konfigurieren können).
Im Allgemeinen sind beide sehr solide Stream-Verarbeitungssysteme. Der entscheidende Unterschied besteht darin, dass Pubsub ein an GCP angeschlossener Cloud-Dienst ist, während Apache Kafka sowohl in der Cloud als auch in On-Prem verwendet werden kann.