ApsaraMQ for RocketMQは、クラスタリング消費とブロードキャスト消費をサポートしています。 クラスター内のコンシューマーの消費モードをクラスター化またはクライアントでのブロードキャストに設定して、メッセージがクラスター内の1つのコンシューマーのみによって消費されるか、すべてのコンシューマーによって消費されるかを指定できます。
背景情報
ApsaraMQ for RocketMQは、Publish-Subscribeパターンに基づくメッセージングシステムです。 ApsaraMQ for RocketMQでは、コンシューマーがトピックをサブスクライブしてメッセージを取得および消費します。
同じグループIDで識別される複数のコンシューマは、同じコンシューマクラスタに属し、同じ消費ロジックとタグを使用する必要があります。 詳細については、「サブスクリプションの一貫性」をご参照ください。
消費のクラスタリング
基本的な概念
クラスタリング消費モードでは、グループ内の複数のコンシューマが特定のトピックからのメッセージを消費します。 ApsaraMQ for RocketMQは異なるコンシューマーにメッセージを配信し、各メッセージは1つのコンシューマーによってのみ消費されます。
シナリオ
メッセージ負荷分散: ビジネスで多数のメッセージが処理される場合、クラスタリング消費モードを使用して複数のコンシューマにメッセージを分散し、負荷分散を実装できます。 このように、各コンシューマは少数のメッセージのみを処理する。 これにより、メッセージ処理効率とスループットが向上します。
分散データ処理: 大量のデータを処理する必要があるシナリオでは、クラスタリング消費モードを使用してデータを複数のノードに分散できます。 このように、各ノードは、少量のデータのみを処理する。 これにより、処理速度が向上する。
使用上の注意
クラスタリング消費モードでは、失敗したメッセージは必ずしも同じマシンに再配信されません。
同じグループのコンシューマーには、必ず同じ消費モードを指定してください。 同じグループのコンシューマに対して異なる消費モードを指定した場合、ブロードキャスト消費モードが有効になります。
たとえば、5つのコンシューマーで構成されるグループを作成します。 グループ内の2つのコンシューマーにクラスタリング消費モードを指定し、グループ内の他の3つのコンシューマーにブロードキャスト消費モードを指定した場合、ブロードキャスト消費モードは5つのコンシューマーすべてに使用されます。
放送消費量
基本的な概念
ブロードキャスト消費モードでは、グループ内の複数のコンシューマーが特定のトピックのメッセージを消費すると、ApsaraMQ for RocketMQは各メッセージをクラスター内のすべてのコンシューマーに配信します。 これにより、各メッセージが各コンシューマによって少なくとも1回消費されることが保証される。
このモードは、注文処理など、複数のコンシューマが同じメッセージグループを同時に処理するシナリオに適しています。
シナリオ
通知および通知: 重要な通知または通知がリリースされると、システムは、ブロードキャスト消費モードを使用して、メッセージに加入しているすべてのユーザに通知または通知を送信することができる。 これにより、各ユーザが通知またはアナウンスを適時に受信することが保証される。
リアルタイムデータ同期: 分散システム内の特定のデータをリアルタイムで同期して、複数のノード間でデータの一貫性を維持する場合があります。 ブロードキャスト消費モードを使用して、データ変更を同期するすべてのノードにデータ変更に関する通知を送信できます。 このようにして、各ノードのデータを一貫させることができる。
使用上の注意
ブロードキャスト消費モードでは、ApsaraMQ for RocketMQは、メッセージが少なくとも1回は消費者によって消費されることを保証しますが、消費に失敗したメッセージは再配信されません。 消費の失敗を手動で処理する必要があります。
ブロードキャスト消費モードでは、コンシューマは、コンシューマが再起動されるたびに、最新のメッセージからメッセージ消費を開始する。 コンシューマーは、コンシューマーが停止したときにApsaraMQ for RocketMQブローカーに送信されるメッセージを自動的にスキップします。 このモードを使用するときは注意してください。
ブロードキャスト消費モードでは、各メッセージは多数の消費者によって繰り返し処理される。 ほとんどの場合、クラスタリング消費モードを使用することを推奨します。
同じグループのコンシューマーには、必ず同じ消費モードを指定してください。 同じグループのコンシューマに対して異なる消費モードを指定した場合、ブロードキャスト消費モードが有効になります。
たとえば、5つのコンシューマーで構成されるグループを作成します。 グループ内の2つのコンシューマーにクラスタリング消費モードを指定し、グループ内の他の3つのコンシューマーにブロードキャスト消費モードを指定した場合、ブロードキャスト消費モードは5つのコンシューマーすべてに使用されます。
クラスタリング消費と放送消費の違い
機能の可用性は、消費モードによって異なります。 次の表に、クラスタリング消費モードで使用できる機能と、ブロードキャスト消費モードで使用できる機能を示します。
機能 | クラスタリング消費モード | 放送消費モード |
TCPクライアントSDK | ||
HTTPクライアントSDK | ||
注文メッセージ | ||
消費者オフセットリセット | ||
メッセージの再試行 | ||
蓄積されたメッセージのクエリとアラート | ||
サブスクリプションクエリ | ||
消費者の進歩 | ApsaraMQ for RocketMQブローカーで維持。
| クライアントに維持。 ブロードキャスト消費モードでメッセージが繰り返し消費される確率は、クラスタリング消費モードよりも高い。 コンシューマが再起動されるたびに、コンシューマは最新のメッセージから消費を開始します。 |
クラスタリング消費モードとブロードキャスト消費モードの設定
ApsaraMQ for RocketMQでは、クライアントの消費モードを変更できます。 消費モードを変更するには、メッセージをサブスクライブするSDKのコードで対応するパラメーターを設定する必要があります。 パラメーターを設定しない場合は、クラスタリング消費モードが使用されます。
TCPクライアントSDK
SDK for Javaのサンプルコード
消費のクラスタリング
// Set the MessageModel parameter to CLUSTERING. If you do not configure this parameter, the clustering consumption mode is automatically used. properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.CLUSTERING);
放送消費量
// Set the MessageModel parameter to BROADCASTING. properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.BROADCASTING);
SDK for CまたはC ++ のサンプルコード
消費のクラスタリング
// Set the MessageModel parameter to CLUSTERING. If you do not configure this parameter, the clustering consumption mode is automatically used. factoryInfo.setFactoryProperty(ONSFactoryProperty:: MessageModel, ONSFactoryProperty::CLUSTERING);
放送消費量
// Set the MessageModel parameter to BROADCASTING. factoryInfo.setFactoryProperty(ONSFactoryProperty:: MessageModel, ONSFactoryProperty::BROADCASTING);
SDK forのサンプルコード。NET
消費のクラスタリング
// Set the MessageModel parameter to CLUSTERING. If you do not configure this parameter, the cluster consumption mode is automatically used. factoryInfo.setFactoryProperty(ONSFactoryProperty.MessageModel, ONSFactoryProperty.CLUSTERING);
放送消費量
// Set the MessageModel parameter to BROADCASTING. factoryInfo.setFactoryProperty(ONSFactoryProperty.MessageModel, ONSFactoryProperty.BROADCASTING);
HTTPクライアントSDK
デフォルトでは、HTTPクライアントSDKはクラスタリング消費モードをサポートしています。 消費モードを指定するためにパラメータを設定する必要はありません。
FAQ
指定後にクラスタリング消費モードが有効にならないのはなぜですか?
この問題は、次のいずれかの理由で発生する可能性があります。
処理するメッセージは、順序付けられたメッセージです。 順序付けられたメッセージは、クラスタリングの消費のみをサポートします。
使用するSDKはHTTPクライアントタイプです。 HTTPクライアントは、クラスタリングの消費のみをサポートします。
グループ内の消費者ごとに異なる消費モードを指定できますか?
いいえ、グループ内の異なるコンシューマーに対して異なる消費モードを指定することはできません。
同じグループのコンシューマーには、必ず同じ消費モードを指定してください。 同じグループのコンシューマに対して異なる消費モードを指定した場合、ブロードキャスト消費モードが有効になります。