19

チェックポイントとトリミングは AWS KCL ライブラリでどのように関連していますか?

ドキュメンテーションページの処理の開始、シャットダウン、およびスロットリングには次のように記載されています。

デフォルトでは、KCL は、最後に追加されたレコードであるストリームの先端からレコードの読み取りを開始します。この構成では、受信側のレコード プロセッサが実行される前に、データ生成アプリケーションがレコードをストリームに追加すると、そのレコードは、起動後にレコード プロセッサによって読み取られません。

常にストリームの先頭からデータを読み取るようにレコード プロセッサの動作を変更するには、Amazon Kinesis Streams アプリケーションのプロパティ ファイルに次の値を設定します。

initialPositionInStream = TRIM_HORIZON

Java で Amazon Kinesis クライアント ライブラリ コンシューマーを開発するドキュメント ページには、次のように記載されています。

Streams では、レコード プロセッサが、シャードで既に処理されたレコードを追跡する必要があります。KCL は、checkpointer (IRecordProcessorCheckpointer) を processRecords に渡すことで、この追跡を処理します。レコード プロセッサは、このインターフェイスで checkpoint メソッドを呼び出して、シャード内のレコードの処理がどの程度進んだかを KCL に通知します。ワーカーに障害が発生した場合、KCL はこの情報を使用して、最後に処理された既知のレコードからシャードの処理を再開します。

最初のページは、KCL がストリームの先頭で再開したことを示しているように見えます。2 ページ目は、最後に処理された既知のレコード ( をRecordProcessor使用して処理済みとしてマークされたcheckpointer) です。私の場合、最後に処理された既知のレコードから再起動する必要があります。initialPositionInStream を TRIM_HORIZON に設定する必要がありますか?

4

3 に答える 3

15

キネシス ストリームには 2 つのオプションがあります。最新のレコードを読み取るか、最も古いレコード (TRIM_HORIZON) から開始することができます。

ただし、アプリケーションを開始すると、チェックポイントを使用して停止した位置から読み取るだけです。これらのチェックポイントは dynamodb で確認できます (通常、テーブル名はアプリ名と同じです)。したがって、アプリを再起動すると、通常は停止したところから続行されます。

答えはノーです。initialPositionInStreamを TRIM_HORIZONに設定する必要はありません。

于 2016-07-24T06:37:43.450 に答える
5

Kinesis ストリームからイベントを読み取る場合、次の 4 つのオプションがあります。

TRIM_HORIZON - 自動的にトリミングされる前にストリーム シャードに残っている最も古いイベント (デフォルトは 1 日ですが、最大 7 日まで延長できます)。ストリームで利用可能なすべてのレコードを処理する新しいアプリケーションを開始する場合は、このオプションを使用しますが、イベントに追いついてリアルタイムで処理を開始できるようになるまでにはしばらく時間がかかります。

LATEST - ストリーム内の最新のイベント。過去のすべてのイベントを無視します。ティール タイムにすぐに処理したい新しいアプリケーションを開始する場合は、このオプションを使用します。

AT/AFTER_SEQUENCE_NUMBER - 通常、シーケンス番号は、イベントの処理中に保持しているチェックポイントです。これらのチェックポイントにより、リーダーに障害が発生した場合や、バージョンを更新してすべてのイベントの処理を続行し、それらを失うことのない場合でも、イベントを確実に処理できます。AT/AFTER の違いは、イベントを正常に処理する前または後のチェックポイントの時間に基づいています。

他のすべてのオプションはストリームに対してグローバルであるため、これが唯一のシャード固有のオプションであることに注意してください。KCL を使用している場合、そのシャードの「現在の」シーケンス番号を持つ各シャードのレコードを使用して、そのアプリケーションの DynamoDB テーブルを管理しています。

AT_TIMESTAMP - ストリームに入れられたイベントの推定時間。タイムスタンプに基づいて処理する特定のイベントを検索する場合は、このオプションを使用します。たとえば、特定の時間にサービスで実際のイベントが発生したことがわかっている場合、シーケンス番号がなくても、これらの特定のイベントを処理するアプリケーションを開発できます。

詳細については、こちらの Kinesis ドキュメントを参照してください: https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html

于 2016-07-31T04:02:00.103 に答える