既存の Topic をサブスクライブするために新しいコンシューマーグループを作成する際、初期コンシューマーオフセットはどのように設定しますか?
オンラインのコンシューマーがメッセージを消費しないにもかかわらず、グループにメッセージの滞留がある場合は、どうすればよいですか?
ダッシュボードのメッセージ滞留メトリックが高いにもかかわらず、調査の結果メッセージがすでに消費されている場合はどうすればよいですか?
クライアントが初めてサーバーに接続する際の接続失敗は、どのようにトラブルシューティングしますか?
以下の構成が正しいことを確認してください:
エンドポイントが正しく指定されていることを確認してください。エンドポイントは、インスタンスの詳細 ページ (ApsaraMQ for RocketMQ コンソール) で取得できます。
telnet <エンドポイントのドメイン名> <ポート番号> コマンドを実行して、ネットワーク接続を確認します。
アプリケーションがオンプレミスにデプロイされている場合、またはリージョン間のアクセスが必要で Cloud Enterprise Network (CEN) を使用してネットワークを構築できない場合は、パブリックエンドポイントを使用して ApsaraMQ for RocketMQ インスタンスにアクセスします。パブリックエンドポイントを使用すると、アウトバウンドトラフィック料金が発生します。詳細については、4.x シリーズインスタンスのパブリックネットワークアクセス料金 または 5.x シリーズインスタンスのパブリックネットワークアクセス料金をご参照ください。
アプリケーションが Alibaba Cloud Elastic Compute Service (ECS) インスタンスにデプロイされている場合は、VPC エンドポイントを使用して Virtual Private Cloud (VPC) 経由で ApsaraMQ for RocketMQ インスタンスにアクセスします。このシナリオでは、ECS インスタンスが ApsaraMQ for RocketMQ インスタンスと同じリージョンにあることを確認してください。
パブリックネットワークアクセスが有効になっている 5.0 シリーズのインスタンスの場合、ホワイトリストが構成されているかどうかを確認します。デフォルトでは、パブリックネットワークアクセスはすべての IP アドレスからの接続を許可します。ホワイトリストが構成されている場合、ホワイトリスト内の IP アドレスのみが ApsaraMQ for RocketMQ にアクセスできます。
Topic 名が正しいことを確認します。名前に余分なスペースや特殊文字が含まれていないこと、および Topic がコンソールで作成されていることを確認してください。
ユーザー名とパスワードが正しいことを確認します。
5.0 シリーズのインスタンスの場合、インスタンスのユーザー名とパスワードを入力します。これらはコンソールのインスタンス詳細ページから取得できます。
4.0 シリーズのインスタンスの場合、Alibaba Cloud アカウントまたは Resource Access Management (RAM) ユーザーの AccessKey ID と AccessKey Secret を入力します。ユーザーに必要な権限が付与されていることを確認してください。AccessKey ペアを取得するには、「AccessKey ペアの作成」をご参照ください。
サブスクリプション関係に不整合がある場合は、どうすればよいですか?
コンソールにログインし、グループ ページに移動して、指定したグループのサブスクリプション関係とコンシューマー情報を表示します。サブスクリプション関係に不整合があるコンシューマーのサブスクリプションコードを変更して、一貫性を確保します。
詳細なトラブルシューティング手順については、「ApsaraMQ for RocketMQ でのサブスクリプション関係の不整合のトラブルシューティング方法」をご参照ください。
メッセージの滞留は、どのように処理しますか?
メッセージの滞留は、以下の理由で発生する可能性があります:
コンシューマーのメッセージ処理ロジックに異常があり、メッセージが消費されない。
メッセージプロデューサーアプリケーションでトラフィックの急増が発生する。メッセージの生成レートが消費レートを大幅に上回り、メッセージが滞留する。
コンシューマーが依存するダウンストリームサービスの応答時間が増加し、消費スレッドがブロックされる。
消費スレッドの数が不十分である。消費の同時実行性が低いため、消費レートが生成レートに追いつかなくなる。
クライアントログまたはスタック情報を確認して、例外の原因を特定します。詳細については、「メッセージ滞留の処理方法」をご参照ください。
コンシューマーがメッセージを消費できない場合は、どうすればよいですか?
ApsaraMQ for RocketMQコンソールにログインし、グループ ページに移動します。コンシューマーがオンラインであり、クライアント接続が正常であることを確認します。クライアントが接続されていない場合は、クライアントログを確認してエラーを特定し、修正します。
サブスクリプション関係に一貫性があることを確認します。一貫性がない場合は、サブスクリプション関係の詳細に基づいてコンシューマークライアントを特定し、クライアントのメッセージサブスクリプションコードを変更します。
コンシューマーグループ内のマシンがダウンした場合、再起動中にメッセージは失われますか?
いいえ、失われません。ApsaraMQ for RocketMQ は永続的なサブスクリプションを使用します。コンシューマーグループがオフラインになったり、消費例外が発生したりしても、メッセージは失われません。コンシューマークライアントがオンラインに戻ると、中断したオフセットから消費を再開します。
メッセージをサブスクライブする際に、メッセージタグを空にすることはできますか?
いいえ、できません。メッセージをサブスクライブする際に空のタグを設定すると、コンシューマーはメッセージを受信しません。Topic 内のすべてのメッセージをサブスクライブするには、タグを * に設定します。以下のサンプルコードに例を示します:
String topic = "Your Topic";
// タグを使用してメッセージをフィルタリングします。これはすべてのメッセージをサブスクライブします。
FilterExpression filterExpression = new FilterExpression("*", FilterExpressionType.TAG);
pushConsumer.subscribe(topic, filterExpression);詳細については、「タグベースのフィルタリング」をご参照ください。
既存の Topic をサブスクライブするために新しいコンシューマーグループを作成する際、初期コンシューマーオフセットはどのように設定しますか?
コンシューマーグループを作成する際に、初期コンシューマーオフセットを設定することはできません。デフォルトでは、コンシューマーが初めて起動するとき、新しい Topic をサブスクライブするか既存の Topic をサブスクライブするかにかかわらず、Topic 内の最も古いメッセージから消費を開始します。
コンシューマーが初めて起動した後、ApsaraMQ for RocketMQ コンソールでコンシューマーオフセットをリセットできます。詳細については、「コンシューマーオフセットのリセット」をご参照ください。
オンラインのコンシューマーがメッセージを消費しないにもかかわらず、グループにメッセージの滞留がある場合は、どうすればよいですか?
コンシューマーグループが Topic に使用しているサブスクリプション方式を確認してください。コンシューマーがメッセージフィルタリングを使用して Topic をサブスクライブしている場合、フィルター条件に一致しないメッセージは滞留としてカウントされます。これは想定される動作です。詳細については、「メッセージフィルタリング」をご参照ください。
SQL またはタグベースのフィルタリングを使用していて、メッセージが消費されていないにもかかわらずグループにメッセージの滞留がある場合、滞留メッセージ数は次のように計算されます。
SQL フィルタリング:滞留メッセージ数 = 準備完了メッセージ数 + Inflight メッセージ数 - フィルタリング条件を満たさないメッセージ数
タグベースのフィルタリング:滞留メッセージ数 = (準備完了メッセージ数 + Inflight メッセージ数) × タグに一致するメッセージの割合
タグに一致するメッセージの割合 = サンプル内でタグに一致するメッセージ数 / サンプリングされたメッセージの総数
ダッシュボードのメッセージ滞留メトリックが高いにもかかわらず、調査の結果メッセージがすでに消費されている場合はどうすればよいですか?
この問題は、Remoting プロトコルのソフトウェア開発キット (SDK) を使用し、コンシューマー側で消費モードをブロードキャスト消費に設定した場合に発生する可能性があります。サーバー側は、コンシューマーオフセット情報に基づいてメッセージの滞留を判断します。しかし、ブロードキャスト消費モードでは、コンシューマーオフセットはクライアント側で維持されます。その結果、ダッシュボードでメッセージの滞留が誤って表示されることがあります。
さらに、コンシューマーがタグベースまたは SQL フィルタリングを使用している場合、フィルター条件に一致しないメッセージは滞留していると見なされます。