Ich bewerte Google Pub / Sub gegen Kafka? [geschlossen]

79

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

Naresh
quelle
6
Nicht genau das, wonach Sie suchen, aber vielleicht eine interessante Lektüre für Sie - Spotify's Reise in die Cloud: Warum Spotify sein Event Delivery System von Kafka auf Google Cloud Pub / Sub
migriert hat

Antworten:

89

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).

gunit
quelle
4
Die Wiedergabe ist in den meisten ereignisorientierten Architekturen ein kritisches Merkmal. Darüber hinaus fügt Kafka Nachrichten eine Sequenznummer hinzu und wird so zur maßgeblichen Sequenzquelle.
Buzz Moschetti
4
Die Möglichkeit, eine "Wiedergabe" mit einem Nachrichtenwarteschlangensystem wie PubSub durchzuführen, besteht darin, das Thema auf mehr Abonnements aufzufächern (dh mehr Kopien der Nachrichten zu erstellen), und jeder Verbraucher verbraucht sein eigenes Abonnement in seinem eigenen Tempo. Ich nehme an, Sie können ein Abonnement haben, das nur zur Wiedergabe gedacht ist, wenn Sie es brauchen. Um dasselbe mit Kafka zu tun, würden Sie einen neuen Konsumenten erstellen und von vorne anfangen zu konsumieren (da Kafka keine Kopie der Nachrichten erstellt, gibt es jedem Konsumenten nur einen eigenen "Zeiger" -Versatz, um zu verfolgen, was war bereits gelesen)
gunit
2
Kinesis kann als verwalteter Dienst betrachtet werden, der Kafka semantisch ähnlich ist, aber es ist ungenau zu sagen, dass es sich um eine "verwaltete Version von Kafka" handelt. Eine aktuelle "verwaltete Kafka" finden Sie unter Confluent Cloud Confluent.io/confluent-cloud
Emmett Butler
6
Cloud Pub / Sub hat kürzlich Unterstützung für die Wiedergabe zuvor bestätigter Nachrichten hinzugefügt. In der Kurzanleitung und im Blogbeitrag wird die Verwendung der Funktion erläutert.
Kamal Aboul-Hosn
1
@EmmettButler ist richtig; Kinesis ist ein eigenes Produkt. Selbst wenn es von Kafka betrieben wurde, wird eine völlig andere API eingeführt. Amazon bietet verwaltetes Kafka mit AWS MSK an .
user0000001
13

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.

Selknam
quelle
1
Ich denke, das kann irreführend sein. Sofern Sie keine eigene Bibliothek über das Kafka-Wire-Protokoll schreiben möchten, bieten die vorhandenen Clients bereits konfigurierbare Mechanismen für das Festschreiben der Offsets. Auch festgelegte Offsets werden nicht in Zookeeper gespeichert, sondern in einem speziellen Thema "__consumer_offsets", das unter den Brokern repliziert wird. Dies ist eine gute Lektüre: konfluent.io/blog/…
Zoltan
12

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.

Mete Atamel
quelle
7
Das ist kein wirklicher Unterschied, da es mehrere Anbieter gibt, die Kafka auch als vollständig verwalteten Service anbieten. Der Unterschied besteht möglicherweise darin, dass Google PubSub nur als Dienst in der Googles Cloud verfügbar ist, sodass weder eine On-Prem-Version noch ein verwalteter Dienst in anderen Cloud-Anbietern wie AWS oder Azure ausgeführt wird.
Hans Jespersen
2
"Google PubSub ist nur als Dienst in der Googles Cloud verfügbar" ist falsch. Ihre Anwendung ist nicht an die Bereitstellung in Google App Engine gebunden. Sie können von jedem Client aus eine Verbindung zu GooglePub / Sub herstellen und veröffentlichen, solange Sie dies tun Stellen Sie eine sichere Verbindung über ein "Dienstkonto" her.
Jeryl Cook
11
@ JerylCook Ich denke, er meint nur, dass Sie Googles Pub / Sub nicht auf Prem installieren können
Sinaesthetic