このトピックでは、グローバルメッセージレプリケーション機能をすぐに理解して使用できるよう、操作ガイド、ページパラメーター、よくある質問 (FAQ) について説明します。
前提条件
ApsaraMQ for RocketMQ (クラウドメッセージキュー) インスタンスが作成されている必要があります。バージョン要件は次のとおりです。
ApsaraMQ for RocketMQ 4.0 シリーズインスタンス。
説明4.0 シリーズインスタンスの Standard Edition は、一方向同期のみをサポートします。
ApsaraMQ for RocketMQ 5.0 シリーズインスタンス。
このトピックでは、ソースクラスターとターゲットクラスターの両方が ApsaraMQ for RocketMQ 5.0 シリーズインスタンスである例を説明します。
仕様の推奨事項
グローバルメッセージレプリケーションを使用すると、トピックマッピングを設定した後にメッセージ同期により、インスタンスに TPS のオーバーヘッドが発生します。したがって、同期タスクのソースとターゲットの ApsaraMQ for RocketMQ インスタンスの送信および受信 TPS のピーク制限を考慮する必要があります。
推奨仕様:
たとえば、同期がない場合、ApsaraMQ for RocketMQ インスタンスの送信 TPS のピークは 10,000 メッセージ/秒、受信 TPS のピークは 10,000 メッセージ/秒です。
ソースインスタンスとターゲットインスタンスの TPS は、次のように設定することを推奨します。
タスクタイプ | ソースインスタンス | ターゲットインスタンス | ||||
送受信 TPS のピーク制限 (メッセージ/秒) | 送信 TPS のピーク (メッセージ/秒) | 受信 TPS のピーク (メッセージ/秒) | 送受信 TPS のピーク制限 (メッセージ/秒) | 送信 TPS のピーク (メッセージ/秒) | 受信 TPS のピーク (メッセージ/秒) | |
一方向同期 | 30,000 | 10,000 | 20,000 | 20,000 | 10,000 | 10,000 |
双方向同期 | 40,000 | 20,000 | 20,000 | 40,000 | 20,000 | 20,000 |
インスタンスの送受信 TPS のピーク制限は、インスタンスの詳細 ページで確認できます。異なる仕様のインスタンスの TPS 制限については、「仕様の制限」をご参照ください。
ビジネス上の要件に応じて、ターゲットインスタンスの受信 TPS のピークを調整できます。
グローバルメッセージレプリケーションタスクの作成
初めてグローバルメッセージレプリケーションを使用すると、[Alibaba Cloud Service Authorization - RocketMQ Global Message Replication] ダイアログボックスが表示されます。[確認] をクリックすると、ターゲットサービスのサービスリンクロール AliyunServiceRoleForRMQDisasterRecovery が自動的に作成され、ApsaraMQ for RocketMQ でグローバルメッセージレプリケーション機能を利用できるようになります。詳細については、「サービスリンクロール」をご参照ください。
ステップ 1:タスクの作成
ApsaraMQ for RocketMQ コンソールにログインします。
左側メニューで、[グローバルメッセージレプリケーション] をクリックし、[タスクの作成] をクリックします。
[タスクの作成] ページで、次の情報を入力します。主な設定項目は以下のとおりです。残りのパラメーターは必要に応じて設定します。その後、[作成] をクリックします。
ページの上部で、[タスク名] を
rocket-testに設定し、タスクタイプ に一方向バックアップ:送信元クラスターのデータが、送信先クラスターに同期されます。 を選択して、必要に応じて[タスクの説明] を入力します。 左ペインと右ペインでソースクラスターとターゲットクラスターを設定します。 ペイン間の矢印は同期方向を示します。ソースクラスターとターゲットクラスターのクラスタータイプごとの設定については、次の表をご参照ください。
ApsaraMQ for RocketMQ
パラメーター
説明
例
バージョン
ApsaraMQ for RocketMQ インスタンスのバージョンを選択します。
4.0 シリーズインスタンス
5.0 シリーズインスタンス
5.0 シリーズインスタンス
[リージョン]
ApsaraMQ for RocketMQ インスタンスのリージョンを選択します。
中国 (杭州)
[インスタンス]
ApsaraMQ for RocketMQ インスタンスを選択します。
rmq-cn-778***
認証モード
設定不要
ACL ベースの認証
ACL ベースの認証
ユーザー名
ユーザー名を選択します。
yS8x01****
セキュリティグループ ID
ApsaraMQ for RocketMQ インスタンスをホストする ECS インスタンスのセキュリティグループ。このパラメーターは、[バージョン] を 5.0 シリーズインスタンスに設定する場合に必要です。
インバウンドルール:要件なし。
アウトバウンドルール:
ポリシー:許可
プロトコル:カスタム TCP
宛先:CIDR ブロックには、クラスターの vSwitch のすべての CIDR ブロックを含める必要があります。ポート範囲には 8080 および 8081 を含める必要があります。
sg-2ze4jlbqy2s40pc4****
フィルター条件のシステム設定
(オプション) メッセージにカスタム属性 (ユーザープロパティ) を追加できます。これにより、コンシューマーは SQL-92 構文を使用したサブスクリプションポリシーに基づいてメッセージをフィルタリングできます。
キー:ユーザープロパティのキー。
ソースクラスターの値:ソースクラスターからのメッセージに追加されるユーザープロパティの値。
ターゲットクラスターの値:ターゲットクラスターからのメッセージに追加されるユーザープロパティの値。
次のコードは、SQL-92 サブスクリプションフィルタリングの例です。
String sqlStr = "{Key} IS NOT NULL AND {Key} = {Source/Target Cluster Value}"; consumer.subscribe(MqConfig.TOPIC, MessageSelector.bySql(sqlStr));なし
Apache RocketMQ
パラメーター
説明
例
アクセスポイント
アクセスポイントの形式は
{ドメイン名/IP}:{ポート番号}です。XX.XX.XX.XX:8080
認証モード
設定不要
ACL ベースの認証
ACL ベースの認証
ユーザー名
ビジネス要件に基づいてユーザー名を入力します。
yS8x01****
パスワード
ビジネス要件に基づいてパスワードを入力します。
F17R4to****
ネットワークタイプ
パブリックネットワーク
VPC
パブリックネットワーク
[リージョン]
このパラメーターは、[ネットワークタイプ] を VPC に設定した場合に必要です。Apache RocketMQ がデプロイされている ECS インスタンスのリージョンを選択します。
中国 (杭州)
VPC
このパラメーターは、[ネットワークタイプ] を VPC に設定した場合に必要です。Apache RocketMQ がデプロイされている ECS インスタンスの VPC を選択します。
vpc-bp17fapfdj0dwzjkd****
[vSwitch]
このパラメーターは、[ネットワークタイプ] を VPC に設定した場合に必要です。Apache RocketMQ がデプロイされている ECS インスタンスの vSwitch を選択します。
vsw-bp1gbjhj53hdjdkg****
セキュリティグループ ID
このパラメーターは、[ネットワークタイプ] を VPC に設定した場合に必要です。Apache RocketMQ がデプロイされている ECS インスタンスのセキュリティグループを選択します。
インバウンドルール:要件なし。
アウトバウンドルール:
ポリシー:許可
プロトコル:カスタム TCP
宛先:CIDR ブロックには、すべての Apache RocketMQ ノードの CIDR ブロックを含める必要があります。ポート範囲には、すべての Apache RocketMQ ノードのサービスポートを含める必要があります。デフォルトのポートは 9876、10911、10909 です。NameServer またはブローカーのポートを変更した場合は、変更後のポートを指定する必要があります。
sg-2ze4jlbqy2s40pc4****
フィルター条件のシステム設定
(オプション) メッセージにカスタム属性 (ユーザープロパティ) を追加できます。これにより、コンシューマーは SQL-92 構文を使用したサブスクリプションポリシーに基づいてメッセージをフィルタリングできます。
キー:ユーザープロパティのキー。
ソースクラスターの値:ソースクラスターからのメッセージに追加されるユーザープロパティの値。
ターゲットクラスターの値:ターゲットクラスターからのメッセージに追加されるユーザープロパティの値。
次のコードは、SQL-92 サブスクリプションフィルタリングの例です。
String sqlStr = "{Key} IS NOT NULL AND {Key} = {Source/Target Cluster Value}"; consumer.subscribe(MqConfig.TOPIC, MessageSelector.bySql(sqlStr));なし
ステップ 2:トピックマッピングの設定
[タスクの基本情報] ページで、左側メニューにある [メッセージ同期タスク] をクリックします。
[一括マッピング] または [マッピングの追加] をクリックして、ダイアログボックスで同期するトピックのマッピングを設定します。
一括マッピング:必要なトピックマッピングを設定して選択し、[OK] をクリックします。
マッピングの追加:必要なトピックマッピングを設定し、[OK] をクリックします。
説明ソースクラスターが Apache RocketMQ クラスターである場合、メッセージ同期用のグループを指定する必要があります。業務で既に使用中のグループは使用しないでください。
メッセージ同期は、トピックマッピングを設定した後にのみ開始します。
ステップ 3:(オプション) コンシューマー進捗同期の有効化
コンシューマー進捗同期を有効にすると、トピックを消費するグループの現在の消費進捗をターゲットクラスターに同期できます。詳細については、「コンシューマー進捗同期」をご参照ください。
コンシューマークライアントの設定
たとえば、ソースクラスターが中国 (上海) リージョンの ApsaraMQ for RocketMQ インスタンスで、ターゲットクラスターが中国 (杭州) リージョンの ApsaraMQ for RocketMQ インスタンスである双方向同期タスクを設定します。このとき、フィルター条件のキーを Region に、ソースクラスターの値を Shanghai に、ターゲットクラスターの値を Hangzhou に設定します。
通常、上海のコンシューマークライアントは上海リージョンのデータのみを消費し、杭州のデータは消費しません。したがって、単一のカスタム属性によるマッチングで十分です。詳細については、「イベントパターン」をご参照ください。
メッセージをサブスクライブし、単一のカスタム属性に基づいてマッチングします。
String topic = "topic";
// リモートリージョンのメッセージのみをサブスクライブします。
FilterExpression filterExpression = new FilterExpression("Region IS NOT NULL", FilterExpressionType.SQL92);
// ローカルで生成されたメッセージでは、ローカルのプロデューサーアプリケーションがこのキーを設定しないため、ユーザープロパティの Region キーは NULL になります。
simpleConsumer.subscribe(topic, filterExpression);フィルタリングなしでトピック内のすべてのメッセージをサブスクライブします。
String topic = "topic";
// すべてのメッセージをサブスクライブします。
FilterExpression filterExpression = new FilterExpression("True", FilterExpressionType.SQL92);
simpleConsumer.subscribe(topic, filterExpression);