すべてのプロダクト
Search
ドキュメントセンター

ApsaraMQ for RocketMQ:負荷分散ポリシー

最終更新日:Jul 09, 2024

ApsaraMQ for RocketMQは、プロデューサーとコンシューマーに異なるロードバランシングポリシーを使用します。 コンシューマの場合、負荷分散ポリシーはメッセージの蓄積に影響します。

背景情報

ApsaraMQ for RocketMQでは、クライアントSDKの更新に基づいて負荷分散ポリシーが最適化されます。 次の負荷分散ポリシーを使用できます。

SDK for Java V2.x.x.FinalおよびSDK for C ++ V3.x.xと互換性のある負荷分散ポリシー

前提条件

  • Java用TCPクライアントSDK:

    • Java用TCPクライアントSDKがV2.x.x.Finalにアップグレードされました。

    • インスタンスは、中国 (杭州) 、中国 (青島) 、中国 (北京) 、中国 (張家口) 、中国 (フフホト) 、中国 (深セン) 、中国 (成都) 、ドイツ (フランクフルト) 、インドネシア (ジャカルタ) のいずれかのリージョンにデプロイする必要があります。

  • C ++ のためのTCPクライアントSDK:

    • C ++ 用TCPクライアントSDKがV3.x.xにアップグレードされました。

    • インスタンスは任意のリージョンにデプロイできます。

メリット

SDK for Java V2.x.x.FinalおよびSDK for C ++ V3.x.xと互換性のある負荷分散ポリシーには、次の利点があります。

  • 消費者は柔軟な方法でメッセージを消費できます。 コンシューマはキューに基づいてメッセージを消費しなくなりました。 同じキュー内のメッセージは、複数のコンシューマによって消費されます。

  • 消費者の数が待ち行列の数を超えると、消費者はアイドル状態のままではない。 これにより、リソースの無駄を回避できます。

プロデューサの負荷分散ポリシー

  • 順序付けられていないメッセージの場合、プロデューサはラウンドロビンモードでメッセージをキューに送信します。 無効メッセージは、通常メッセージ、トランザクションメッセージ、スケジュール済みメッセージ、および遅延メッセージです。 次の図は例を示しています。Producer - Normal messages

    前の図では、3つのキューが利用可能であり、「Msg」に続く数字はメッセージのシーケンスを示します。 プロデューサは、第1のメッセージをキュー1に送信し、第2のメッセージをキュー2に送信し、第3のメッセージをキュー3に送信し、第4のメッセージをキュー1に送信し、その後のメッセージを同じシーケンスで送信する。

  • 順序付けられたメッセージの場合、プロデューサは同じシャードキーを持つメッセージを同じキューに送信します。 次の図は例を示しています。Producer - Ordered messages

    上の図では、プロデューサーはシャードキーが1のすべてのメッセージをキュー1に送信し、シャードキーが2のすべてのメッセージをキュー2に送信します。

消費者向けの負荷分散ポリシー

  • 順序付けられていないメッセージの場合、ApsaraMQ For RocketMQブローカーは、トピック内のすべてのメッセージをグループ内の複数のコンシューマに均等に配布します。

    Java V2.x.x.Final用のSDKまたはC ++ V3.x.x用のSDKを使用してメッセージを消費すると、キューに基づく負荷分散は実行されなくなります。 同じキュー内のメッセージは、複数のコンシューマによって消費されます。 次の図は例を示しています。Consumer - Normal messages

    上の図では、各キュー内の複数のメッセージを異なるコンシューマーで同時に消費できます。 例えば、キュー2内の4つのメッセージは、消費のために消費者1、消費者2、消費者3、および消費者4に配信される。

  • 順序付きメッセージの場合、ApsaraMQ forRocketMQはシャーディングキーに基づいてバランスメッセージを読み込みます。 異なるシャーディングキーを有するメッセージは、消費のために複数のキューに負荷分散することができる。 同じシャーディングキーを持つメッセージは、同じコンシューマーに送信されます。 これにより、メッセージが生成された順序で確実に消費されます。 次の図は例を示しています。56

    説明
    • 3-1: この背景色のメッセージはキュー1に属します。 Msg2-1は、メッセージがキュー1の2番目のメッセージであり、メッセージのシャーディングキーが1であることを示します。

    • 3-2: この背景色のメッセージはキュー2に属します。 Msg3-2は、メッセージがキュー2の3番目のメッセージであり、メッセージのシャーディングキーが2であることを示します。

    上の図では、Msg1-1、Msg2-1、およびMsg3-1はすべて、同じシャーディングキー1を持つため、コンシューマー1によって使用されます。 同様に、シャーディングキーが2であるメッセージはすべてコンシューマ2によって消費される。

    Msg4-3とMsg4-4は、シャーディングキーが異なるため、消費のために異なる消費者に配布されます。

SDK for Java V1.x.x.FinalおよびSDK for C ++ V1.x.xおよびV2.x.xと互換性のある負荷分散ポリシー

プロデューサの負荷分散ポリシー

プロデューサーの場合、SDK For Java V1.x.x.FinalおよびSDK for C ++ V1.x.xおよびV2.x.xと互換性のある負荷分散ポリシーは、SDK for Java V2.x.x.FinalおよびSDK for C ++ V3.x.xと互換性のあるものと同じです。 詳細については、「SDK For Java V2.x.x.FinalおよびSDK for C ++ V3.x.xと互換性のある負荷分散ポリシー」をご参照ください。

  • 順序付けられていないメッセージの場合、プロデューサはラウンドロビンモードでメッセージをキューに送信します。

  • 順序付けられたメッセージの場合、プロデューサは同じシャードキーを持つメッセージを同じキューに送信します。

消費者向けの負荷分散ポリシー

説明

順序付けられていないメッセージの負荷分散ポリシーは、順序付けられたメッセージの負荷分散ポリシーと同じです。

ApsaraMQ for RocketMQアーキテクチャには、ブローカーやネームサーバーなどのノードが含まれています。 ブローカーは、トピックに関するルート情報をネームサーバーに報告します。

たとえば、ApsaraMQ For RocketMQアーキテクチャに含まれるブローカーは1つだけです。 ApsaraMQ for RocketMQがプロデューサーからトピックにメッセージを送信すると、これらのトピックのメッセージはデフォルトで8つのキューに分散されます。 キューは論理的な概念です。 次に、ApsaraMQ for RocketMQブローカーは、これらのキューを同じグループのコンシューマーに均等に配布します。

ApsaraMQ for RocketMQでは、キューを同時に1つのコンシューマーにのみ配布できます。 各コンシューマは、次のシナリオに基づいてキューからのメッセージを処理します。

  • 消費者の数が待ち行列の数よりも大きい場合、追加の消費者は待ち行列からのメッセージを処理しない。 次の図は例を示しています。Consumer - 1

  • コンシューマの数がキューの数に等しい場合、各コンシューマは1つのキューからのメッセージを処理します。 次の図は例を示しています。Consumer - 2

  • 消費者の数がキューの数よりも少ない場合、各消費者は複数のキュー内のメッセージを処理することができる。 次の図は例を示しています。Consumer - 3

コンシューマの場合、負荷分散はキューに基づいて実行されます。 コンシューマは、ハードウェアの制限、システムの制限、リモートプロシージャコール (RPC) に関連する問題、Javaガベージコレクション (GC) などのさまざまな理由により、キュー内のメッセージをタイムリーに処理できない場合があります。 キュー内のメッセージを蓄積することができる。