2017-11-05 8 views
0

Für ein neues Projekt betrachten wir Microservices zusammen mit RabbitMQ oder Kafka. Für beide Technologien habe ich die gleiche Frage, die Antwort könnte sich jedoch unterscheiden.So skalieren Sie parallele Verbraucher in Microservices

Betrachten wir drei Ereignisse:

  1. Produkt erstellen 1
  2. Neues Profil 1
  3. löschen Produkt 1

Wir wollen diese Ereignisse verwenden, um Daten unter Dienste "Duplikat". Bei Verwendung eines Consumers werden alle Nachrichten in der richtigen Reihenfolge ausgeführt und die Datenbank wird konsistent sein.

Wenn jedoch dieser eine Consumer langsam bei der Verarbeitung der Nachrichten wird, möchte man möglicherweise einen anderen Verbraucher parallel hinzufügen. An dieser Stelle ist es ungewiss, dass Ereignis 1 vor Ereignis 3 ausgeführt wird, was zu einer inkonsistenten Datenbank führen kann (zuerst löschen, danach erstellen).

Gefunden einige Informationen here über das Thema, aber beide Lösung scheint schwer zu implementieren. Wie wäre es möglich, diese Verbraucher zu vergrößern? Gibt es einen Unterschied darin, wie man das mit RabbitMQ oder Kafka handhaben würde?

Antwort

2

Für die Kafka-basierte Implementierung müssen Sie nur sicherstellen, dass alle Ereignisse derselben logischen Gruppe (id?) Auf der gleichen Partition landen. In diesem Fall können Sie mehr Benutzer hinzufügen (bis zu Partitionen), um Ereignisse parallel zu behandeln, aber jeder Konsument behandelt Ereignisse nur für seine logische Gruppe (n).

Sie können dieses Verhalten erreichen, indem Sie den richtigen Schlüssel/Partitionierungsansatz auswählen - entweder ID als Schlüssel verwenden oder eine ausgefeiltere Partitionierungsimplementierung verwenden.

+1

Um dies zu erweitern, müssten Sie Ihre eigene Partioner-Klasse implementieren (https://kafka.apache.org/0110/javadoc/org/apache/kafka/clients/producer/Partitioner.html) und es gibt welche Probleme mit der Handhabung eigener Partitionsschlüssel in Kafka. Wenn für eine "logische Gruppe" viel mehr Volumen als für andere vorhanden ist, könnte die Partition andere Partitionen überlisten und besondere Wartung erfordern, um Teil desselben Themas zu bleiben. –

+0

Also in RabbitMQ würden Sie nur Warteschlangen für Nachrichten erstellen, die gleichzeitig behandelt werden können, nehme ich an – JDel

Verwandte Themen