Schließen Sie die Resharding-Aktion ab - Amazon-Kinesis-Data-Streams

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Schließen Sie die Resharding-Aktion ab

Nach allen Resharding-Vorgängen in Amazon Kinesis Data Streams und vor dem Fortsetzen der normalen Datensatzverarbeitung sind weitere Verfahren und Überlegungen erforderlich. In den folgenden Abschnitten werden diese beschrieben.

Warten Sie, bis ein Stream wieder aktiv wird

Nachdem Sie einen Resharding-Vorgang (entweder splitShard oder) aufgerufen habenmergeShards, müssen Sie warten, bis der Stream wieder aktiv wird. Der zu verwendende Code entspricht dem Code beim Warten, bis ein Stream nach dem Erstellen eines Streams aktiviert wird. Dieser Code sieht wie folgt aus:

DescribeStreamRequest describeStreamRequest = new DescribeStreamRequest(); describeStreamRequest.setStreamName( myStreamName ); long startTime = System.currentTimeMillis(); long endTime = startTime + ( 10 * 60 * 1000 ); while ( System.currentTimeMillis() < endTime ) { try { Thread.sleep(20 * 1000); } catch ( Exception e ) {} try { DescribeStreamResult describeStreamResponse = client.describeStream( describeStreamRequest ); String streamStatus = describeStreamResponse.getStreamDescription().getStreamStatus(); if ( streamStatus.equals( "ACTIVE" ) ) { break; } // // sleep for one second // try { Thread.sleep( 1000 ); } catch ( Exception e ) {} } catch ( ResourceNotFoundException e ) {} } if ( System.currentTimeMillis() >= endTime ) { throw new RuntimeException( "Stream " + myStreamName + " never went active" ); }

Denken Sie an Datenrouting, Datenpersistenz und den Shard-Status nach einem Reshard

Kinesis Data Streams ist ein Datenstreaming-Dienst in Echtzeit. Ihre Anwendungen sollten davon ausgehen, dass Daten kontinuierlich durch die Shards in Ihrem Stream fließen. Bei einem Resharding werden Datensätze, die an die übergeordneten Shards geleitet wurden, basierend auf den Hash-Schlüsselwerten, die den Partitionsschlüsseln zu den Datensätzen zugeordnet werden, zu den untergeordneten Shards umgeleitet. Datensätze, die sich vor dem Resharding in den übergeordneten Shards befunden haben, verbleiben jedoch in diesen Shards. Die übergeordneten Shards verschwinden nicht, wenn der Reshard auftritt. Sie bleiben zusammen mit den Daten erhalten, die sie vor dem Resharding enthielten. Auf die Datensätze in den übergeordneten Shards kann über die getRecords Operationen getShardIteratorund in den Kinesis Data Streams API oder über die Kinesis Client Library zugegriffen werden.

Anmerkung

Datensätze können ab dem Zeitpunkt, an dem Sie zum Stream hinzugefügt wurden, bis zum aktuellen Aufbewahrungszeitraum aufgerufen werden. Dies gilt unabhängig von Änderungen an den Shards in dem Stream in diesem Zeitraum. Weitere Informationen zum Aufbewahrungszeitraum eines Streams finden Sie unter Ändern Sie den Aufbewahrungszeitraum für Daten.

Bei einem Resharding-Vorgang geht ein übergeordneter Shard vom Status OPEN in den Status CLOSED und anschließend in den Status EXPIRED über.

  • OPEN: Vor einer Reshard-Operation befindet sich ein übergeordneter Shard im OPEN Status, was bedeutet, dass Datensätze sowohl zum Shard hinzugefügt als auch aus dem Shard abgerufen werden können.

  • CLOSED: Nach einer Reshard-Operation wechselt der übergeordnete Shard in einen Status. CLOSED Das bedeutet, dass Datensätze sind mehr zum Shard hinzugefügt werden. Die Datensätze, die zu diesem Shard hinzugefügt worden wären, werden nun stattdessen zu einem untergeordneten Shard hinzugefügt. Datensätze können jedoch weiterhin für einen begrenzten Zeitraum von dem Shard abgerufen werden.

  • EXPIRED: Nach Ablauf der Aufbewahrungsfrist des Streams sind alle Datensätze im übergeordneten Shard abgelaufen und es kann nicht mehr darauf zugegriffen werden. Zu diesem Zeitpunkt geht der Shard selbst in den Status EXPIRED über. Aufrufe an getStreamDescription().getShards zum Aufzählen der Shards im Stream berücksichtigen keine Shards mit dem Status EXPIRED in der Liste der zurückgegebenen Shards. Weitere Informationen zum Aufbewahrungszeitraum eines Streams finden Sie unter Ändern Sie den Aufbewahrungszeitraum für Daten.

Wenn sich der Stream nach einem Resharding-Vorgang wieder im Status ACTIVE befindet, können Sie sofort mit dem Auslesen von Daten aus den untergeordneten Shards beginnen. Die übergeordneten Shards, die nach dem Reshard verbleiben, können jedoch immer noch Daten enthalten, die Sie noch nicht gelesen haben und die dem Stream vor dem Reshard hinzugefügt wurden. Wenn Sie Daten aus den untergeordneten Shards auslesen, bevor alle Daten aus den übergeordneten Shards ausgelesen wurden, lesen Sie die Daten für einen bestimmten Hash-Schlüssel möglicherweise nicht in der durch die Sequenznummern der Datensätze festgelegten Reihenfolge. Unter der Annahme, dass die Reihenfolge der Daten wichtig ist, sollten Sie daher nach einem Resharding Daten aus den übergeordneten Shards immer so lange weiter auslesen, bis sie ausgeschöpft sind. Erst dann sollten Sie mit dem Auslesen von Daten aus den untergeordneten Shards beginnen. Wenn getRecordsResult.getNextShardIterator den Wert null zurückgibt, bedeutet dies, dass alle Daten im übergeordneten Shard ausgelesen wurden. Wenn Sie Daten mit der Kinesis Client Library lesen, erhalten Sie die Daten nach einem Reshard möglicherweise nicht in der richtigen Reihenfolge.