このトピックでは、ApsaraMQ for RocketMQのメッセージキューの定義、モデル関係、および内部属性について説明します。 このトピックでは、メッセージキューのバージョン互換性情報と使用状況に関する注意事項についても説明します。
定義
キューは、ApsaraMQ for RocketMQでメッセージを保存および送信するために使用されるコンテナーです。 キューは、ApsaraMQ for RocketMQメッセージの最小ストレージ単位です。
ApsaraMQ for RocketMQのトピックは、複数のキューで構成されています。 このように、キューは水平パーティショニングとストリーミングストレージをサポートします。
- 注文ストレージ
キューは本質的に順序付けられています。 メッセージは、キューに入れられたのと同じ順序で格納されます。 最も早いメッセージはキューの先頭にあり、最新のメッセージはキューの末尾にあります。 オフセットは、キュー内のメッセージの位置と順序にラベルを付けるために使用されます。
- ストリーミング操作のセマンティクス
ApsaraMQ for RocketMQのキューベースのストレージを使用すると、コンシューマーはオフセットから1つ以上のメッセージを読み取ることができます。 これにより、集計読み取りやバックトラック読み取りなどの機能を実装できます。 これらの機能は、RabbitMQまたはActiveMQでは使用できません。
モデル関係
デフォルトでは、ApsaraMQ for RocketMQは信頼性の高いメッセージストレージを提供します。 正常に配信されたすべてのメッセージは、キューに永続的に格納されます。 メッセージは、プロデューサによって送信され、消費者クライアントによって受信される。 各メッセージは、少なくとも1回は正常に配信され得る。
ApsaraMQ for RocketMQのキューモデルは、Kafkaのパーティションモデルに似ています。 ApsaraMQ for RocketMQでは、キューはトピックの一部です。 メッセージはトピックで管理されていてもキューで操作されます。 たとえば、プロデューサーが特定のトピックにメッセージを送信すると、メッセージはトピック内のキューに送信されます。
ApsaraMQ for RocketMQのキュー数を変更してスケールアウトまたはスケールインすることができます。
内部属性
- 定義: 現在のキューからデータを読み書きできるかどうか。
- 値: ブローカーによって定義されます。 次に、列挙について説明します。
- 6: 読み取りと書き込み。 メッセージは、現在のキューに読み書きできます。
- 4: 読み取り専用。 メッセージは現在のキューから読み取ることはできますが、書き込みはできません。
- 2: 書き込み専用。 メッセージは現在のキューに書き込むことはできますが、読み取ることはできません。
- 0: 読み取りまたは書き込みのステータスが使用できません。 現在のキューでは、読み取りまたは書き込み操作は許可されていません。
- 制約: 読み取りおよび書き込み権限は、O&M操作に関連しています。 アクセス許可を頻繁に変更しないことをお勧めします。
行動の制約
各トピックは、メッセージを格納するために使用される1つ以上のキューで構成されます。 各トピックのキュー数は、メッセージタイプとインスタンスが存在するリージョンに関連しています。 キューの数は変更できません。
バージョンの互換性
- Broker versions 3.xおよび4.x: キュー名は、トピック名、ブローカーID、およびキューIDで構成され、物理ノードにバインドされます。
- Broker versions 5.x: キュー名は、クラスターによって割り当てられ、物理ノードから分離されるグローバルに一意の文字列です。
キュー名を作成したり、他の操作にバインドしたりしないことをお勧めします。 そうしないと、ブローカーの更新時にキュー名の解決に失敗する可能性があります。
使用上の注意
キュー番号の設定
ApsaraMQ for RocketMQで最小数のキューを作成することを推奨します。
- クラスター内のメタデータ量の増加
ApsaraMQ for RocketMQは、キューに基づいてメトリックを収集し、データを監視します。 キューの数が多いと、メタデータの量が増加する場合がある。
- オーバーロードされたクライアント
ApsaraMQ for RocketMQでのメッセージの読み取りと書き込みは、キューに基づいて実行されます。 多数のキューは、システム負荷を増加させる空のポーリング要求を生成し得る。
キューを追加するシナリオ
- 物理ノードの負荷分散
ApsaraMQ for RocketMQの各トピックのキューは、異なるサービスノードに配布できます。 クラスターのスケールアウト後にクラスタートラフィックの負荷分散を確保するために、キューを追加するか、以前のキューを新しいサービスノードに移行することを推奨します。
- 順序付きメッセージに関連するパフォーマンスボトルネックの問題
ApsaraMQ for RocketMQブローカー4.xでは、順序付きメッセージはキューでのみ有効になります。 その結果、順序付けられたメッセージの並行性は、キューの数に基づく。 システムでパフォーマンスのボトルネックが発生した場合は、キューの数を増やすことを推奨します。
- コンシューマーロードバランシングがキュー数の影響を受けない場合の順序なしメッセージの消費
ApsaraMQ for RocketMQ broker 5.xは、メッセージベースの負荷分散をサポートしています。 キュー内のメッセージは、消費のためにすべての消費者に均等に配信できます。 したがって、あまりにも多くのキューが消費の同時実行に影響を与える可能性があることを心配する必要はありません。 負荷分散の詳細については、「コンシューマ向けの負荷分散ポリシー」をご参照ください。