シャードイテレータタイプ

Kinesis Data Streams

概要

Kinesis Streams からレコードを取得する際、レコード取得の前にシャードイテレータを取得します。シャードイテレータは GetRecords で読み取る範囲を示しますが、シャードイテレータタイプによってその範囲の開始地点が変わります。

現時点では、5 種類のシャードイテレータタイプが存在しています。

The following are the valid Amazon Kinesis shard iterator types:

  • 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.
https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html#API_GetShardIterator_ResponseSyntax

今回は、それぞれのシャードイテレータタイプの動作をみていきます。

シャードイテレータタイプ

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 実行以降に登録されたレコードを取得できます。