メインコンテンツにスキップ
バージョン: 5.0

メッセージの保存とクリーンアップ

このトピックでは、Apache RocketMQがメッセージを保存する方法について説明します。これには、保存粒度、決定基準、および処理ポリシーが含まれます。

背景情報

Apache RocketMQのMessageQueueの定義に基づくと、メッセージはブローカーによって受信された順序でキューに保存されます。理論的には、キューが保存できるメッセージの数に制限はありません。

実際のデプロイシナリオでは、ブローカーの物理ストレージ容量が限られているため、メッセージを永続的に保存することはできません。したがって、メッセージをデプロイするときは、3つの質問に答える必要があります。ブローカーにメッセージを保存する方法を決定するためにどのような基準を使用しますか?保存されたメッセージを管理するために使用される粒度は?メッセージストレージの使用量が制限を超えた場合にどのような対策を講じる必要がありますか?Apache RocketMQのメッセージストレージとクリーンアップのメカニズムは、上記の質問への回答を提供します。

次の側面に基づいてメッセージストレージとクリーンアップメカニズムを使用することにより、より適切なO&Mを実行できます

  • ストレージのSLA:ストレージ期間とは、ユーザーがメッセージを取得できる期間を指します。この機能は、長い消費期間が必要なシナリオ、メッセージが蓄積されるシナリオ、および障害復旧が必要なシナリオに適しています。

  • ストレージコストの評価と制御:Apache RocketMQはディスクにメッセージを保存します。ストレージスペースを評価し、ストレージリソースを事前に予約できます。

メッセージストレージメカニズム

動作メカニズム

Apache RocketMQの各ノードは、特定の期間メッセージを保存します。この期間はストレージ期間と呼ばれ、メッセージが保存される期間を決定するために使用されます。ストレージ期間内のメッセージは保持されますが、期間制限を超えるメッセージは、消費されたかどうかに関係なくクリーンアップされます。

次のセクションでは、メッセージストレージメカニズムに関連する項目について説明します。

  • 管理粒度:Apache RocketMQは、ノードに基づいてメッセージストレージ期間を管理します。

  • 決定基準:メッセージストレージ期間は決定基準として使用されます。メッセージの量やサイズと比較して、ストレージ期間はメッセージの値をより効率的に評価するのに役立ちます。

  • メッセージストレージと消費ステータスは無関係です:Apache RocketMQのメッセージストレージ期間は、メッセージが生成された時点から始まり、消費ステータスとは関係ありません。統一された計算戦略を使用することにより、メッセージストレージメカニズムを簡略化できます。

次の図は、メッセージがキューにどのように保存されるかを示しています。メッセージストレージ

注記

管理粒度

Apache RocketMQがブローカーノードに基づいてストレージ期間を管理する理由は次のとおりです。

  • メッセージストレージの利点:Apache RocketMQは、物理ログキューと軽量論理キューで構成される統一された2レベルの編成方法を使用して物理データを管理します。この方法では、順序付けられた読み取りおよび書き込み操作、高スループット、および高性能の利点が得られます。ただし、この方法では、トピックまたはキューに基づいてメッセージストレージを管理することはできません。

  • 容量の保証とデータのセキュリティ:Apache RocketMQはトピックまたはキューに基づいて独立したストレージファイルを生成しますが、ファイルは同じ基盤となるストレージメディアを共有します。トピックまたはキューに基づいてストレージ期間を柔軟に管理できます。クラスタのストレージ容量が不足すると、ストレージのSLAが満たされない可能性があります。メッセージを安全に管理したい場合は、異なるクラスタで異なるストレージ期間を使用してメッセージを保存するのが最善の方法です。

メッセージストレージと消費ステータスの関係

Apache RocketMQは、メッセージが消費されているかどうかに関係なく、メッセージストレージ期間を一元的に管理します。

非アクティブなコンシューマーまたは異常な消費が原因で、メッセージがキューに蓄積される可能性があります。今のところ、この問題に対する効果的な解決策はありません。消費されていないすべてのメッセージが保持されると、ストレージスペースがすぐに使い果たされます。これは、新しいメッセージの読み取りおよび書き込み操作の速度に影響します。

コンシューマーは、ストレージ期間に基づいてメッセージを管理し、各メッセージのライフサイクルを決定できます。コンシューマーは、ストレージ期間中いつでもメッセージを消費できます。または、コンシューマーオフセットのリセット機能を使用してメッセージを複数回消費できます。

メッセージストレージファイル構造 Apache RocketMQメッセージは、デフォルトでローカルディスクファイルに保存され、ストレージファイルのルートディレクトリは構成パラメータstorePathRootDirによって決定されます。ストレージ構造を次の図に示します。commitlogフォルダには物理メッセージファイルが格納され、consumeCQueueフォルダには論理キューインデックスが格納されます。 MessageStore

メッセージクリーンアップメカニズム

Apache RocketMQでは、メッセージのストレージ期間は実際のストレージ期間とは異なります。これは、メッセージがローカルディスクに保存されるためです。ローカルディスクスペースが不足すると、サービスの安定性を確保するためにシステムが強制的にメッセージを削除します。その結果、実際のストレージ期間は指定されたストレージ期間よりも短くなります。

Apache RocketMQストレージシステムは、Alibaba Cloudのクラウドネイティブテクノロジーに基づいて開発されています。これにより、すべてのインスタンスはストレージ容量に制限を課すことなくストレージスペースを使用できます。すべてのメッセージは、指定されたストレージ期間に基づいて保存されます。ストレージスペースの不足によるメッセージの削除を心配する必要はありません。

使用上の注意

ビジネス要件に基づいてストレージ期間を延長します

Apache RocketMQは、ストレージ期間に基づいてメッセージを保持するかどうかを制御します。ビジネス要件に基づいて、より長いストレージ期間を指定することをお勧めします。ストレージ期間が長いほど、緊急の障害復旧、緊急のトラブルシューティング、およびメッセージのバックトラックのための操作を実行するための余裕が大きくなります。