Ich habe gelesen, dass Sie mehrere Consumer-Apps pro Kinesis-Stream haben können.
Allerdings habe ich gehört, dass Sie nur Verbraucher pro Shard haben können. Ist das wahr? Ich finde keine Dokumentation, die dies unterstützt, und ich kann mir nicht vorstellen, wie das sein könnte, wenn mehrere Verbraucher aus demselben Stream lesen. Natürlich bedeutet das nicht, dass der Produzent Inhalte in verschiedenen Shards für verschiedene Konsumenten wiederholen muss.
Die Kinesis-Client-Bibliothek startet Threads im Hintergrund, jeder hört auf 1 Shard im Stream. Sie können keine Verbindung zu einem Shard über mehrere Threads herstellen, dh nach Design.
Beispiel: Wenn Ihre Anwendung auf einer EC2-Instanz ausgeführt wird, und verarbeitet einen Amazon Kinesis-Stream mit vier Shards. Dieses Instanz hat einen KCL-Worker und vier Record-Prozessoren (ein Record Prozessor für jeden Shard). Diese vier Plattenprozessoren laufen rein parallel im selben Prozess.
In der obigen Erläuterung bezieht sich der Begriff "KCL-Worker" auf eine Kinesis-Consumer-Anwendung. Nicht die Fäden.
Aber unten bezieht sich derselbe "KCL-Worker" -Begriff auf einen "Worker" -Thread in der Anwendung; was ist ein runnable.
Wenn Sie die KCL verwenden, Sie sollten sicherstellen, dass die Anzahl der Instanzen den Wert von Anzahl der Shards (außer bei Ausfallbereitschaft). Jeder Scherbe ist verarbeitet von genau einem KCL-Worker und hat genau einen korrespondierenden Record-Prozessor, so dass Sie nie mehrere Instanzen benötigen, um einen zu verarbeiten Scherbe.
Siehe Worker.java Klasse in der KCL-Quelle.
Bis zur Party, aber die Antwort ist, dass Sie mehrere Kunden pro Kinesis-Shard haben können. Eine KCL-Instanz wird nur einen Prozess pro Shard starten, aber Sie können eine andere KCL-Instanz verwenden, die den gleichen Stream (und den gleichen Shard) verwendet, vorausgesetzt, der zweite hat die Berechtigung.
Es gibt jedoch Grenzen, wie in docs
Jeder Shard kann bis zu 5 Transaktionen pro Sekunde für Lesevorgänge unterstützen, bis zu einer maximalen Gesamtdatenrate von 2 MB pro Sekunde.
Wenn Sie einen Stream mit mehreren Consumern haben möchten, in dem jede Nachricht einmal verarbeitet wird, sind Sie vermutlich mit einer Amazon Simple Queue besser dran Service .
Tags und Links sharding amazon-kinesis consumer