概要
Kinesis Streams からレコードを取得する際、レコード取得の前にシャードイテレータを取得します。シャードイテレータは GetRecords
で読み取る範囲を示しますが、シャードイテレータタイプによってその範囲の開始地点が変わります。
現時点では、5 種類のシャードイテレータタイプが存在しています。
The following are the valid Amazon Kinesis shard iterator types:
https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html#API_GetShardIterator_ResponseSyntax
- AT_SEQUENCE_NUMBER – Start reading from the position denoted by a specific sequence number, provided in the value
StartingSequenceNumber
.- AFTER_SEQUENCE_NUMBER – Start reading right after the position denoted by a specific sequence number, provided in the value
StartingSequenceNumber
.- AT_TIMESTAMP – Start reading from the position denoted by a specific time stamp, provided in the value
Timestamp
.- TRIM_HORIZON – Start reading at the last untrimmed record in the shard in the system, which is the oldest data record in the shard.
- LATEST – Start reading just after the most recent record in the shard, so that you always read the most recent data in the shard.
今回は、それぞれのシャードイテレータタイプの動作をみていきます。
シャードイテレータタイプ
AT_SEQUENCE_NUMBER と AFTER_SEQUENCE_NUMBER
StartingSequenceNumber
パラメータで指定したシーケンス番号をもとにシャードイテレータを発行します。AT_SEQUENCE_NUMBER では指定したシーケンス番号から、AFTER_SEQUENCE_NUMBER では指定したシーケンス番号の直後から読み取りを開始します。
AT_TIMESTAMP
Timestamp
パラメータで指定したタイムスタンプに該当する位置から読み取りを開始します。指定したタイムスタンプに該当するレコードがない場合は、そのタイムスタンプ以降のレコードから読み取ります。また、指定したタイムスタンプが最も古いレコードのタイムスタンプより前であれば、TRIM_HORIZON と同様の動作となります。
TRIM_HORIZON
シャード内で最も古いレコードから読み取りを開始します。NextShardIterator
を辿ることでシャード内のレコードをすべて取得しますが、最も古いレコードを読み込むことになるため、瞬間的に GetRecords.IteratorAgeMilliseconds
メトリクスがスパイクする可能性があります。
LATEST
シャード内で最も新しいレコードの直後から読み取りを開始します。GetShardIterator
実行以降に登録されたレコードを取得できます。