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.
Themen
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 angetStreamDescription().getShards
zum Aufzählen der Shards im Stream berücksichtigen keine Shards mit dem StatusEXPIRED
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.