AWS KCLライブラリでチェックポイントとトリミングはどのように関連していますか?
ドキュメントページ起動、シャットダウン、およびスロットリングの処理は次のように述べています。
デフォルトでは、KCLはストリームの先端からレコードの読み取りを開始します。これは、最後に追加されたレコードです。この構成では、受信側のレコードプロセッサが実行される前にデータ生成アプリケーションがレコードをストリームに追加すると、レコードプロセッサは起動後にレコードプロセッサによって読み取られません。
レコードプロセッサの動作を変更して常にストリームの先頭からデータを読み取るようにするには、Amazon Kinesis Streamsアプリケーションのプロパティファイルで次の値を設定します。
initialPositionInStream = TRIM_HORIZON
ドキュメントページJavaでのAmazon Kinesisクライアントライブラリコンシューマーの開発は次のように述べています。
ストリームでは、レコードプロセッサがシャードで既に処理されたレコードを追跡する必要があります。 KCLは、checkpointer(IRecordProcessorCheckpointer)をprocessRecordsに渡すことにより、この追跡を処理します。レコードプロセッサは、このインターフェイスでチェックポイントメソッドを呼び出して、シャード内のレコードの処理がどこまで進んだかをKCLに通知します。ワーカーが失敗した場合、KCLはこの情報を使用して、最後に処理された既知のレコードでシャードの処理を再開します。
最初のページは、KCLがストリームの最後、2番目のページは最後に処理された既知のレコード(RecordProcessor
がcheckpointer
を使用して処理済みとしてマークされたもの)から再開すると言っているようです。私の場合、間違いなく最後に処理されたレコードから再開する必要があります。 initialPositionInStreamをTRIM_HORIZONに設定する必要がありますか?
キネシスストリームには2つのオプションがあり、最新のレコードを読み取るか、最も古いレコード(TRIM_HORIZON)から開始できます。
ただし、アプリケーションを起動すると、チェックポイントを使用して停止した位置から読み取るだけです。これらのチェックポイントはdynamodbで確認できます(通常、テーブル名はアプリ名です)。したがって、アプリを再起動すると、通常は停止したところから続行されます。
答えは「いいえ」です。initialPositionInStreamをTRIM_HORIZONに設定する必要はありません。
キネシスストリームからイベントを読み取る場合、4つのオプションがあります。
TRIM_HORIZON-自動的にトリミングされる前にストリームシャードに残っている最も古いイベント(デフォルトは1日ですが、最大7日まで延長できます)。ストリームで利用可能なすべてのレコードを処理する新しいアプリケーションを開始する場合は、このオプションを使用しますが、リアルタイムでイベントの処理を開始して開始できるようになるまでには時間がかかります。
LATEST-ストリーム内の最新のイベントで、過去のすべてのイベントを無視します。ティールタイムですぐに処理する新しいアプリケーションを開始する場合は、このオプションを使用します。
AT/AFTER_SEQUENCE_NUMBER-シーケンス番号は通常、イベントの処理中に保持しているチェックポイントです。これらのチェックポイントにより、リーダーに障害が発生した場合や、そのバージョンを更新してすべてのイベントを処理し続け、イベントを失わないようにする場合でも、確実にイベントを処理できます。 AT/AFTERの違いは、イベントを正常に処理する前または後のチェックポイントの時間に基づいています。
他のすべてのオプションはストリームに対してグローバルであるため、これは唯一のシャード固有オプションであることに注意してください。 KCLを使用している場合、KCLはそのアプリケーションのDynamoDBテーブルを、そのシャードの「現在の」シーケンス番号を持つ各シャードのレコードで管理しています。
AT_TIMESTAMP-ストリームに入れられたイベントの推定時間。タイムスタンプに基づいて処理する特定のイベントを検索する場合は、このオプションを使用します。たとえば、特定の時間にサービスで実際のイベントが発生したことがわかっている場合は、シーケンス番号がなくても、これらの特定のイベントを処理するアプリケーションを開発できます。
詳細については、Kinesisのドキュメントをご覧ください: https://docs.aws.Amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html
「TRIM_HORIZON」を使用する必要があります。アプリケーションがストリームからレコードの読み取りを開始するfirst時間にのみ影響します。その後、最後の既知の位置から続行されます。