2017-01-22 3 views
0

Ich möchte verstehen, wann IRecordProcessor die ProcessRecords-Methode von Worker aufgerufen wird. Wenn mein früherer Aufruf von processRecords noch nicht abgeschlossen ist, wird der Worker die nächste processRecords aufrufen? Wird der Worker neue Datensätze von Kinesis abrufen oder wartet er bis zur Ausführung der aktuellen Datensätze?Kinesis Client Worker Logik

Grundsätzlich möchte ich für eine lange Zeit warten, wenn ProcessRecords eine Ausnahme beim Speichern von Datensätzen in externen db seit Db war down oder einen anderen Fehler erhalten. Wollen Sie also bestätigen, dass es kein Problem gibt, wenn der Worker nicht beginnt, neue Datensätze abzurufen, bevor die Verarbeitung abgeschlossen ist?

Antwort

0

Auszug aus anderen Fragen:

Die Anwendung (mit Hilfe von KCL) wird auch weiterhin „Shard Iterator“ im Hintergrund abzufragen, damit Sie über die neuen Daten benachrichtigt werden, wenn es darum geht, .

Quelle: https://stackoverflow.com/a/35582161/1622134

Und auch von "Arbeitnehmer" verstehen Sie einen "Worker" Thread in der Anwendung; was ist ein lauffähiges.

Jede Scherbe wird von genau einem KCL Arbeiter verarbeitet und hat genau einen Aufzeichnungsprozessor entspricht, so dass Sie nie mehrere Instanzen benötigen eine Scherbe zu verarbeiten. Siehe die Worker.java-Klasse in der KCL-Quelle.

Quelle: https://stackoverflow.com/a/34509567/1622134

Sie Frage zu beantworten, können Sie, dass es in Ihrer processRecords Umsetzung. Verwenden Sie bei der Verarbeitung von Datensätzen einen try-catch-Block, und schreiben Sie den Prüfpunkt genau dann in DynamoDB, wenn der try-Teil erfolgreich ist. Dieser Weg; Wenn beim Schreiben in eine externe Datenbank ein Fehler auftritt, werden Datensätze und Neustarts nicht verloren gehen. Sie sollten diese Datensatzdaten (die nicht in die Datenbank eingefügt werden können) auch an einem anderen Ort speichern, um sie später zu verarbeiten.

Siehe auch diese Antwort: https://stackoverflow.com/a/32517002/1622134

+0

In worker.java, ruft runProcessLoop und dass es nennt shardConsumer.consumeShard() gibt es nennt checkAndSubmitNextTask(), dass es readyForNextTask prüft oder nicht. Wenn nicht, werden neue Datensätze nicht konsumiert. Also, wie ist es möglich, Worker ruft neue Datensätze ohne Recordprozessor-Prozess zuvor. – user1846749

+0

Wenn auf Ihrer Seite ein vorübergehender Db-Ausfall vorliegt (der das Verbrauchen von Datensätzen verhindert); Sie sollten Ihre Kinesis Consumer Application stoppen, bis dies behoben ist. Oder es gibt einen zweiten Ansatz: Im letzten Link meiner Antwort gibt es eine Zeile, in der Ihre Frage erläutert wird: "Wenn es jedoch fehlschlägt, notieren Sie es an einem anderen Ort, um den Grund zu ermitteln, warum es fehlgeschlagen ist." - Sie können die Datensätze, die während des Ausfalls der Datenbank später benötigt werden, manuell verarbeiten. – az3