ApsaraMQ for RocketMQ は、プロデューサーがメッセージをキューにルーティングする方法と、ブローカーがメッセージまたはキューをコンシューマーに割り当てる方法を制御するために、負荷分散ポリシーを使用します。コンシューマー側のポリシーは、ご利用の TCP クライアント SDK のバージョンによって異なります。
仕組み
ApsaraMQ for RocketMQ は、2 つのコンシューマー負荷分散モデルをサポートしています。
| モデル | 消費者行動 | 互換性 | 主な特徴 |
|---|---|---|---|
| メッセージベース | ブローカーは個々のメッセージをコンシューマーに分散します。複数のコンシューマーが同じキューからのメッセージを処理できます。 | TCP client SDK for Java V2.x.x.Final、TCP client SDK for C++ V3.x.x | コンシューマー数がキュー数を超えてもアイドル状態のコンシューマーは発生しません |
| キューベース | ブローカーはキュー全体をコンシューマーに割り当てます。各キューは厳密に 1 つのコンシューマーによって処理されます。 | TCP client SDK for Java V1.x.x.Final、TCP client SDK for C++ V1.x.x および V2.x.x | アイドル状態のコンシューマーを避けるため、コンシューマー数はキュー数を超えないようにしてください |
プロデューサーの負荷分散は、どちらのモデルでも同じように機能します。
順序なしメッセージ (通常メッセージ、トランザクションメッセージ、スケジュールメッセージ、遅延メッセージ): プロデューサーはメッセージをラウンドロビン方式でキューに送信します。
順序付きメッセージ: プロデューサーは、同じシャーディングキーを持つすべてのメッセージを同じキューに送信します。
SDK for Java V2.x.x.Final および SDK for C++ V3.x.x と互換性のある負荷分散ポリシー
これらの負荷分散ポリシーは、キュー全体ではなく個々のメッセージをコンシューマーに分散します。複数のコンシューマーが同じキューからのメッセージを同時に処理でき、コンシューマー数がキュー数を超えてもアイドル状態のコンシューマーは発生しません。
前提条件
これらの負荷分散ポリシーを使用するには、TCP クライアント SDK をアップグレードしてください。
TCP client SDK for Java: V2.x.x.Final にアップグレードしてください。インスタンスは、中国 (杭州)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (深セン)、中国 (成都)、ドイツ (フランクフルト)、またはインドネシア (ジャカルタ) のいずれかのリージョンにデプロイされている必要があります。
TCP client SDK for C++: V3.x.x にアップグレードしてください。インスタンスは任意のリージョンにデプロイできます。
プロデューサーのルーティング
プロデューサーの負荷分散は、SDK のバージョンに関係なく同じです。
順序なしメッセージ (通常メッセージ、トランザクションメッセージ、スケジュールメッセージ、遅延メッセージ): プロデューサーはメッセージをラウンドロビン方式でキューに送信します。この例では、3 つのキューが利用可能です。プロデューサーは Msg1 を Queue 1 に、Msg2 を Queue 2 に、Msg3 を Queue 3 に、Msg4 を Queue 1 に、といった順序で送信します。

順序付きメッセージ: プロデューサーは、同じシャーディングキーを持つすべてのメッセージを同じキューに送信します。この例では、シャーディングキー 1 を持つすべてのメッセージは Queue 1 に、シャーディングキー 2 を持つすべてのメッセージは Queue 2 に送信されます。

順序なしメッセージのコンシューマー割り当て
順序なしメッセージの場合、ブローカーはトピック内のすべてのメッセージを同じグループ内のコンシューマーに均等に分散します。同じキュー内のメッセージは、異なるコンシューマーによって同時に消費できます。

この例では、Queue 2 内の 4 つのメッセージが、それぞれ Consumer 1、Consumer 2、Consumer 3、Consumer 4 に分散されます。各コンシューマーは、メッセージがどのキューに属しているかに関係なく、独立してメッセージを処理します。
順序付きメッセージのコンシューマー割り当て
順序付きメッセージの場合、ブローカーはシャーディングキーに基づいてメッセージを分散します。同じシャーディングキーを持つすべてのメッセージは同じコンシューマーに送られ、生成順序が保持されます。異なるシャーディングキーを持つメッセージは、異なるコンシューマーに分散できます。

: この背景色のメッセージは Queue 1 に属します。たとえば、Msg2-1 は Queue 1 の 2 番目のメッセージであり、そのシャーディングキーは 1 です。
: この背景色のメッセージは Queue 2 に属します。たとえば、Msg3-2 は Queue 2 の 3 番目のメッセージであり、そのシャーディングキーは 2 です。
この例では、次のようになります。
Msg1-1、Msg2-1、Msg3-1 はすべてシャーディングキー 1 を共有するため、Consumer 1 に送られます。
シャーディングキー 2 を持つメッセージはすべて Consumer 2 に送られます。
Msg4-3 と Msg4-4 は異なるシャーディングキーを持つため、異なるコンシューマーに送られます。


