Ich versuche, ein IoT-System zu entwerfen, das viele IoT-Geräte verschiedene Arten von Sensordaten an einen Front-End-Lastenausgleichsserver sendet, der die Nachrichten dann an ein Aufnahmesystem (derzeit Google Cloud PubSub) sendet. Dann gibt es Konsumenten, die die Nachrichten konsumieren und sie in verschiedene Datenbanken und Tabellen schreiben. Jeder Sensordatentyp verfügt über eine eigene Datenbank.Wo sollte Fanout in einem Verschlusssystem auftreten?
Wo sollte ein Fanout erfolgen?
VOR PubSub System: Wenn das Frontend der Fanout tut, dann hat es groß genug skaliert werden, um genügend Rechenleistung haben, um den Inhalt jeder Nachricht zu suchen, um herauszufinden, welches Thema es Ende zu senden. Dann werde ich ein separates Thema für jede Nachricht und einen Verbraucher für jedes Thema haben.
NACH Pubsub-System: Wenn ich nur ein Thema habe, dass das Frontend alle Nachrichten unabhängig von ihrem Typ verschiebt, muss der Consumer dieses Themas skaliert werden, um jede Nachricht konsumieren und verarbeiten zu können um zu schreiben. Dies würde auch bedeuten, dass dieser eine Verbrauchercode Zugriff auf alle Datenbanken haben muss.
INSIDE PubSub-System: Lassen Sie pubsub den Fanout ausführen, so dass Publisher zwar nur zu einem Thema veröffentlichen, es jedoch mehrere Subskriptionen für dieses Thema gibt (eins für jeden Datentyp) und jeder Konsument von seinem eigenen Abonnement konsumiert löscht alle Nachrichten, die der Datentyp sind, den sie verbrauchen sollen. Es sieht so aus, als ob Kafka dafür besser geeignet wäre.
# 3 ist eine gute Passform für Kafka. Es gibt einen Kafka Connector oder Google PubSub, so dass Sie beide verwenden und PubSub-Nachrichten in Kafka-Themen (oder umgekehrt) ohne jegliche Kodierung routen können. Siehe https://github.com/GoogleCloudPlatform/pubsub/blob/master/kafka-connector/README.md –