6

公式の AWS Kinesis Firehose のドキュメントを読みましたが、重複したイベントの処理方法については言及されていません。誰もそれについて経験がありますか?誰かが ElasticCache を使用してフィルタリングを行っているとググったのですが、AWS Lambda を使用してそのようなフィルタリング ロジックをカプセル化する必要があるということですか? Firehose のようにデータを Redshift に取り込み、同時に「正確に 1 回」のセマンティクスを持つ簡単な方法はありますか? どうもありがとう!

4

2 に答える 2

12

Kinesis Stream の両側で複製を作成できます。同じイベントを Stream に 2 回入れたり、コンシューマーによってイベントを 2 回読み取ったりする場合があります。

プロデューサー側は、Kinesis ストリームにイベントを配置しようとした場合に発生する可能性がありますが、何らかの理由でそれが正常に書き込まれたかどうかわからず、再度配置することにしました。コンシューマー側は、イベントのバッチを取得してそれらの処理を開始し、場所をチェックポイントする前にクラッシュし、次のワーカーが最後のチェックポイントに基づいて Kinesis ストリームから同じイベントのバッチを選択している場合に発生する可能性があります。シーケンス ID。

この問題の解決を開始する前に、そのような重複が発生する頻度と、そのような重複によるビジネスへの影響を評価する必要があります。すべてのシステムが重複を許容できない金融取引を処理しているわけではありません。それにもかかわらず、そのような重複除外が必要であると判断した場合、それを解決する一般的な方法は、何らかのイベント ID を使用し、そのイベント ID を既に処理したかどうかを追跡することです。

ElasticCache with Redis は、イベント ID を追跡するのに適した場所です。処理するイベントを取得するたびに、Redis のハッシュ テーブルに既に存在するかどうかを確認し、見つかった場合はスキップし、見つからない場合はテーブルに追加します (そのような重複の可能な時間枠に基づく一部の TTL)。

(Kinesis Streams の代わりに) Kinesis Firehose を使用することを選択した場合、コンシューマーアプリケーションを制御できなくなり、このプロセスを実装できなくなります。したがって、プロデューサー側でそのような重複除外ロジックを実行するか、Kinesis Streams を使用するように切り替えて Lambda または KCL で独自のコードを実行するか、Redshift で重複除外機能に落ち着くかのいずれかを選択します (以下を参照)。

重複にあまり敏感でない場合は、WINDOW 関数の COUNT DISTINCT や LAST_VALUE など、Redshift のいくつかの関数を使用できます。

于 2016-01-16T22:39:40.053 に答える