スキップしてコンテンツを表示

Amazon SQS キュー内のバックログメッセージの増加を防ぐ方法を教えてください。

所要時間1分
0

Amazon Simple Queue Service (Amazon SQS) キューのメッセージのバックログが増えたので、増加を防ぎたいです。

簡単な説明

スタンダードキューと FIFO SQS キュー

メッセージのバックログは、次の状況で増加します。

  • プロデューサーが、メッセージが消費されるよりも速い速度でメッセージを送信している。
  • コンシューマーが、可視性のタイムアウト期間内にメッセージを削除していない。SQS キューがポーリングされるときに、メッセージがキューに再度追加されている。

FIFO SQS キュー

FIFO (First-In-First-Out) SQS キューでは、次のいずれかの理由でメッセージのバックログが増える場合もあります。

  • FIFO キューのメッセージバッファ制限 (120,000 件)。
  • メッセージグループに属するメッセージが、同じメッセージグループの他のメッセージの処理を妨げるコンシューマーによりスタック状態になっている。

解決策

メッセージのバックログ増加を防ぐには、以下のベストプラクティスに従ってください。

スタンダードキューと FIFO SQS キュー

  • SQS キューに最適な可視性タイムアウトを設定することで、コンシューマーが可視性タイムアウト期間内にメッセージを処理した後にメッセージを削除できるようにします。メッセージの処理にかかる時間がわからない場合は、コンシューマープロセスのハートビートを作成してください。初回の可視性タイムアウト (たとえば、2 分) を指定します。コンシューマーがメッセージを処理するのにより多くの時間が必要な場合は、ChangeMessageVisibility API コールを使用して可視性タイムアウトを増やします。
  • ReceiveMessage API コールを行う場合は、バッチサイズを増やします。MaxNumberOfMessages パラメーターの値を 1 より大きい、10 以内の値に設定します。
  • SQS キューメトリクスで表示されるメッセージのおおよその数を監視します。このメトリクスでは、プロデューサーがコンシューマーがメッセージを使用できるレートよりも高いレートでメッセージを生成するようになっているかどうかを確認できます。水平方向にスケーリングするには、SQS キューを使用するコンシューマーまたはクライアントの数を増やすか、キューをポーリングするスレッドの数を増やします。

FIFO SQS キュー

120,000 メッセージのバッファ

FIFO キューでは、最大 120,000 件のインフライトメッセージが許容されます。インフライトメッセージには、コンシューマーがキューから受信したが、まだそのキューから削除されていないメッセージが含まれます。120,000 件のクォータに達しても、Amazon SQS はエラーメッセージを返しません。

FIFO キューは最初の 120,000 件のメッセージをレビューし、使用可能なメッセージグループを判断します。単一のメッセージグループにメッセージのバックログがある場合、そのバックログのメッセージを正常に処理するまで、他のメッセージグループのメッセージを消費することはできません。

メッセージグループのスケールオーバー

同じメッセージグループに属するメッセージは、メッセージグループに対応する順序で 1 件ずつ処理されます。複数のメッセージグループ ID を持つメッセージを受信する場合、Amazon SQS は同じメッセージグループ ID を持つメッセージをできるだけ多く返そうとします。これにより、他のコンシューマーは別のメッセージグループ ID のメッセージを処理できます。

特定のメッセージグループ ID に属するメッセージが不可視である場合、他のコンシューマーは同じメッセージグループ ID を持つメッセージを処理できません。ただし、コンシューマーは他のメッセージグループからのメッセージを処理することはできます。順序が問題とはならないメッセージグループの数を増やしてみてください。

AWS公式更新しました 1年前