2016-07-23 7 views
6

Wie hängen Checkpoints und Trimming in der AWS KCL-Bibliothek zusammen?Amazon KCL Checkpoints und Trim Horizon

Die Dokumentation Seite Startup Handhabung, Shutdown und Throttling sagt:

standardmäßig die KCL Datensätze aus der Spitze des Strom ;, lesen, die der zuletzt hinzugefügten Datensatz beginnt. Wenn in dieser Konfiguration eine datenerzeugende Anwendung dem Stream Datensätze hinzufügt, bevor irgendwelche empfangenden Datensatzprozessoren ausgeführt werden, werden die Datensätze nach ihrem Start von den Aufzeichnungsprozessoren nicht gelesen.

Um das Verhalten der Aufzeichnungsprozessoren zu ändern, so dass es immer Daten vom Anfang des Streams liest, stellen Sie den folgenden Wert in den Eigenschaften für Ihre Amazon Kinesis Streams Anwendung Datei:

initialPositionInStream = TRIM_HORIZON

Die Dokumentation Seite Entwicklung eines Amazon Kinesis-Client-Bibliothek für Endverbraucher in Java sagt:

Streams erfordert, dass der Aufzeichnungsprozessor Aufzeichnungen über die bereits in einem Shard verarbeiteten Datensätze führt. Die KCL kümmert sich um dieses Tracking für Sie, indem Sie einen Prüfpunkt (IRecordProcessorCheckpointer) ProcessRecords übergeben. Der Aufzeichnungsprozessor ruft die Prüfpunktmethode auf dieser Schnittstelle auf, um die KCL darüber zu informieren, wie weit es bei der Verarbeitung der Datensätze im Shard fortgeschritten ist. In dem -Ereignis, das der Worker fehlschlägt, verwendet die KCL diese Information, um die Verarbeitung des Shards bei dem letzten bekannten verarbeiteten Datensatz neu zu starten.

Die erste Seite scheint zu sagen, dass der KCL an der Spitze des Stroms wieder aufnimmt, die zweite Seite an dem letzten bekannten verarbeiteten Aufzeichnungs (das wurde von den RecordProcessor mit dem checkpointer als verarbeitet markiert). In meinem Fall muss ich unbedingt beim letzten bekannten verarbeiteten Datensatz neu starten. Muss ich initialPositionInStream auf TRIM_HORIZON setzen?

Antwort

7

Mit kinesis stream haben Sie zwei Möglichkeiten, Sie können die neuesten Datensätze lesen oder mit dem ältesten beginnen (TRIM_HORIZON).

Aber sobald Sie Ihre Anwendung gestartet haben, liest es nur von der Position, die es mit seinen Checkpoints gestoppt hat. Sie können diese Checkpoints in dynamodb sehen (normalerweise ist der Tabellenname der App-Name). Wenn Sie also Ihre App neu starten, wird sie normalerweise von dort fortgesetzt, wo sie gestoppt wurde.

Die Antwort ist nein, Sie müssen initialPositionInStream nicht auf TRIM_HORIZON setzen.

+2

Vielen Dank, also in der Realität die initialPositIionInStream gilt, um den Wert zu bestimmen, um zu starten, wenn kein Chekpoint verfügbar ist? – Edmondo1984

+2

Ja, wird verwendet, wenn in Ihrem KCL keine Kontrollpunkte gespeichert sind. –

1

Wenn Sie Ereignisse von einem kinesis Stream lesen, haben Sie 4 Optionen:

TRIM_HORIZON - die ältesten Ereignisse, die noch in den Strom Scherben sind, bevor sie automatisch getrimmt werden (default 1 Tag, kann aber werden verlängert bis 7 Tage).Sie verwenden diese Option, wenn Sie eine neue Anwendung starten möchten, die alle Datensätze verarbeitet, die im Stream verfügbar sind, aber es wird eine Weile dauern, bis es in der Lage ist, die Ereignisse in Echtzeit zu verarbeiten und zu verarbeiten.

LATEST - die neuesten Ereignisse im Stream und ignorieren alle vergangenen Ereignisse. Sie verwenden diese Option, wenn Sie eine neue Anwendung starten, die Sie sofort bearbeiten möchten.

AT/AFTER_SEQUENCE_NUMBER - Die Sequenznummer ist normalerweise der Prüfpunkt, den Sie während der Verarbeitung der Ereignisse behalten. Mit diesen Prüfpunkten können Sie die Ereignisse auch dann zuverlässig verarbeiten, wenn ein Leserfehler auftritt oder wenn Sie die Version aktualisieren und alle Ereignisse weiterverarbeiten möchten, ohne sie zu verlieren. Der Unterschied zwischen AT/AFTER basiert auf der Zeit Ihres Prüfpunkts vor oder nach der erfolgreichen Verarbeitung der Ereignisse.

Bitte beachten Sie, dass dies die einzige shard spezifische Option ist, da alle anderen Optionen global für den Stream sind. Wenn Sie die KCL verwenden, verwaltet sie eine DynamoDB-Tabelle für diese Anwendung mit einem Datensatz für jeden Shard mit der "aktuellen" Folgenummer für diesen Shard.

AT_TIMESTAMP - die geschätzte Zeit des Ereignisses, das in den Stream eingegeben wird. Sie verwenden diese Option, wenn Sie bestimmte Ereignisse suchen möchten, die basierend auf ihrem Zeitstempel verarbeitet werden sollen. Wenn Sie zum Beispiel wissen, dass Sie zu einem bestimmten Zeitpunkt in Ihrem Dienst ein Ereignis aus dem echten Leben hatten, können Sie eine Anwendung entwickeln, die diese spezifischen Ereignisse verarbeitet, auch wenn Sie die Sequenznummer nicht haben.

Weitere Details in Kinesis Dokumentation hier: https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html

+0

Ich bin ein wenig verwirrt gilt dies für nativen API-Zugriff statt Kcl-Nutzung? – Edmondo1984

+0

Die KCL ist eine Bibliothek, die die API implementiert, sie hat keine Kontrolle mehr über den Stream als das, was Sie direkt über die API erhalten können. Die KCL fügt die Anwendungsverwaltungsseite und die Checkpointing-Funktionalität in DynamoDB hinzu, die die Sequenznummer dafür verwendet. – Guy

0

Sie sollten die "TRIM_HORIZON" verwenden. Es hat nur Auswirkungen auf die erste Zeit, die Ihre Anwendung beginnt Datensätze aus dem Stream zu lesen. Danach wird es von der letzten bekannten Position fortgesetzt.