Ich habe nicht viel an Kafka gearbeitet, wollte aber eine Datenpipeline in GCE erstellen. Also wollten wir Kafka vs PUB / Sub kennenlernen. Grundsätzlich möchte ich wissen, wie Nachrichtenkonsistenz, Nachrichtenverfügbarkeit und Nachrichtenzuverlässigkeit sowohl in Kafka als auch in Pub / Sub aufrechterhalten werden
Vielen Dank
Antworten:
Neben der Verwaltung von Google Pub / Sub durch Google und der Open Source-Funktion von Kafka besteht der andere Unterschied darin, dass Google Pub / Sub eine Nachrichtenwarteschlange (z. B. Rabbit MQ) ist, in der Kafka eher ein Streaming-Protokoll ist. Sie können Nachrichten mit Pubsub nicht "erneut lesen" oder "wiedergeben". (BEARBEITEN - Ab Februar 2019 KÖNNEN Sie Nachrichten erneut abspielen und zeitlich bis zu einem bestimmten Zeitstempel rückwärts suchen (siehe Kommentar unten).)
Wenn bei Google Pub / Sub eine Nachricht aus einem Abonnement ausgelesen und bestätigt wurde, ist sie verschwunden. Um mehr Kopien einer Nachricht zu haben, die von verschiedenen Lesern gelesen werden können, "fächern" Sie das Thema auf, indem Sie "Abonnements" für dieses Thema erstellen, wobei jedes Abonnement eine vollständige Kopie von allem enthält, was in das Thema einfließt. Dies erhöht jedoch auch die Kosten, da Google die Pub / Sub-Nutzung anhand der ausgelesenen Datenmenge berechnet.
Mit Kafka legen Sie eine Aufbewahrungsfrist fest (ich glaube, es sind standardmäßig 7 Tage) und die Nachrichten bleiben in Kafka, unabhängig davon, wie viele Verbraucher sie lesen. Sie können einen neuen Verbraucher (auch als Abonnent bezeichnet) hinzufügen und ihn jederzeit von der Vorderseite des Themas aus konsumieren lassen. Sie können die Aufbewahrungsdauer auch auf unendlich festlegen und dann Kafka grundsätzlich als unveränderlichen Datenspeicher verwenden, wie hier beschrieben: http://stackoverflow.com/a/22597637/304262
Amazon AWS Kinesis ist eine verwaltete Version von Kafka, während ich Google Pubsub als verwaltete Version von Rabbit MQ betrachte. Amazon SNS mit SQS ähnelt auch Google Pubsub (SNS stellt das Fanout bereit und SQS stellt die Warteschlange bereit).
quelle
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.
quelle
Ein großer Unterschied zwischen Kafka und Cloud Pub / Sub besteht darin, dass Cloud Pub / Sub vollständig für Sie verwaltet wird. Sie müssen sich nicht um Maschinen, das Einrichten von Clustern, die Feinabstimmung von Parametern usw. kümmern, was bedeutet, dass viel DevOps-Arbeit für Sie erledigt wird. Dies ist wichtig, insbesondere wenn Sie skalieren müssen.
quelle