メインコンテンツにスキップ
バージョン: 5.0

FAQ

RocketMQプロジェクトに関する一般的な質問

1 基本

  1. 他の製品ではなく、RocketMQを使用すべき理由は何ですか?

    RocketMQを選ぶ理由を参照してください

  2. RocketMQを使用するために、ZooKeeperなどの他のソフトウェアをインストールする必要がありますか?

    いいえ、RocketMQは独立して実行できます。

2 使用法

  1. 新しく作成されたConsumerGroupは、どこからメッセージの消費を開始しますか?

    1)5.x SDKが最初にオンラインになると、サーバー上の最新のメッセージから、キューの末尾から消費を開始します。再起動後は、最後の消費位置から消費を継続します。

    2)3.x/4.x SDKはより複雑です。最初の起動が送信されたメッセージから3日以内であれば、コンシューマーはサーバー上の最初に保存されたメッセージから消費を開始します。送信されたメッセージが3日以上経過している場合、コンシューマーはサーバー上の最新のメッセージから、キューの末尾から消費を開始します。再起動後は、最後の消費位置から消費を継続します。

  2. 消費に失敗した場合、どのようにしてメッセージを再消費できますか?

    1)クラスターモードでは、消費ビジネスロジックコードが消費失敗ステータスを返すか、例外をスローします。メッセージの消費に失敗した場合、設定された最大リトライ回数に従ってリトライされ、その後メッセージは破棄されます。

    2)ブロードキャスト消費モードでは、ブロードキャスト消費は少なくとも1回はメッセージが消費されることを保証しますが、再送信オプションは提供しません。

  3. 消費に失敗した場合、どのようにして失敗したメッセージを見つけることができますか?

    1)時間ベースのトピッククエリを使用すると、一定期間内のメッセージをクエリできます。

    2)トピックとメッセージIDを使用して、メッセージを正確にクエリします。

    3)トピックとメッセージキーを使用して、同じメッセージキーを持つすべてのメッセージを正確にクエリします。

  4. メッセージは1回だけ配信されますか?

    RocketMQは、すべてのメッセージが少なくとも1回配信されることを保証します。ほとんどの場合、メッセージは繰り返されません。

  5. 新しいブローカーを追加するにはどうすればよいですか?

    1)新しいブローカーを起動し、NameServerのブローカーリストに登録します。

    2)デフォルトでは、内部システムトピックとコンシューマーグループのみが自動的に作成されます。新しいノードにビジネス用のトピックとコンシューマーグループを配置する場合は、既存のブローカーからコピーします。これらを処理するための管理ツールとコマンドラインを提供しています。

3 設定依存

以下の回答はデフォルト値であり、設定によって変更できます。

  1. メッセージはサーバーにどれくらいの期間保存できますか?

    メッセージは最大3日間保存されます。3日以上使用されていないメッセージは削除されます。

  2. メッセージ本文のサイズ制限は何ですか?

    通常、256KBです。

  3. コンシューマースレッドの数をどのように設定しますか?

    コンシューマーを起動するときに、プロパティを設定できます。パラメーター名はバージョンによって異なります。

4 エラー

  1. APPLY_TOPIC_URL

    • 例外情報

      topic[xxx] not exist, apply first please!
    • 理由

      1)プロデューサーがメッセージを送信するか、コンシューマーがメッセージを消費するときに、トピックのルーティング情報を取得できない場合、この例外が発生します。

    • 解決策

      1)NameServerにトピックのルーティング情報が実際に含まれていることを確認してください。管理ツールまたはWebコンソールを使用して、TopicRouteからNameServerのルーティング情報を照会できます。

      2)ブローカーとコンシューマーが同じNameServerクラスターに接続されていることを確認してください。

      3)トピックのキュー権限がプロデューサーの場合は6(rw-)、コンシューマーの場合は少なくとも2(-w-)であることを確認してください。

      トピックが見つからない場合は、管理ツールコマンドupdateTopicまたはWebコンソールを使用して、ブローカーでトピックを作成します。

  2. NAME_SERVER_ADDR_NOT_EXIST_URL

    • 例外情報

      No name server address, please set it

      または

      connect to xxx failed, maybe the domain name xxx not bind in /etc/hosts
    • 理由

      1)プロデューサーまたはコンシューマー、NameServerのアドレス情報の取得にエラーがあります。

    • 解決策

      1)以下を参照してください:5.1 クライアントのアドレス指定

  3. GROUP_NAME_DUPLICATE_URL

    • 例外情報

      The producer group[xxx] has been created before, specify another name please.
    • 理由

      1)同じ名前のコンシューマーグループがすでに開始されており、登録に失敗しました。

    • 解決策

      1)新しいコンシューマーグループの名前を変更します。

      2)同じ名前のコンシューマーグループが正常に閉じられ、再度開始されました。

  4. CLIENT_PARAMETER_CHECK_URL

    • 例外情報

      consumerGroup can not equal ...

      または

      allocateMessageQueueStrategy is null ...

      または

      Long polling mode, the consumer consumerTimeoutMillisWhenSuspend must greater than brokerSuspendMaxTimeMillis ...

      上記の例外に加えて、ここにリストされていない他の例外が発生する可能性があります。

    • 理由

      1)コンシューマーのパラメーター検証に失敗しました。

    • 解決策

      1)以下を参照してください:5.2 クライアント構成

  5. SUBSCRIPTION_GROUP_NOT_EXIST

    • 例外情報

      subscription group not exist
    • 理由

      1)コンシューマーグループまたはDleayQueueがサブスクリプション情報の取得中にエラーが発生した場合。

    • 解決策

      1)コンシューマーのトピック情報へのサブスクリプションが、NameServerのトピック情報と一致していることを確認します。

      2)ブローカーとコンシューマーが同じNameServerクラスターに接続されていることを確認してください。

      3)トピックのキュー権限が、プロデューサーの場合は6(rw-)、コンシューマーの場合は少なくとも2(-w-)であることを確認します。

  6. CLIENT_SERVICE_NOT_OK

    • 例外情報

      The xxx service state not OK, maybe started once
    • 理由

      1)同じプロデューサー/コンシューマーグループを使用して、同じJVMで複数のプロデューサー/コンシューマーインスタンスを開始すると、クライアントが起動に失敗する可能性があります。

    • 解決策

      1)特定のプロデューサー/コンシューマーグループJVMに対して、1つのプロデューサー/コンシューマーインスタンスのみが起動されていることを確認してください。

  7. NO_TOPIC_ROUTE_INFO

    • 例外情報

      No route info of this topic:
    • 理由

      1)プロデューサーが利用できないトピックにメッセージが送信された場合、このようなことが起こります。

    • 解決策

      1)プロデューサーがネームサーバーに接続し、そこからルーティングメタデータを取得できることを確認します。

      2)ネームサーバーにトピックのルーティングメタデータが含まれていることを確認します。管理ツールまたはWebコンソールを使用して、TopicRouteを使用してネームサーバーからルーティングメタデータをクエリできます。

      3)ブローカーがプロデューサーが接続されている同じネームサーバーリストにハートビートを送信していることを確認します。

      4)トピックに権限6(rw-)、または少なくとも2(-w-)があることを確認します。

      トピックが見つからない場合は、管理ツールコマンドupdateTopicまたはWebコンソールを使用して、ブローカーでトピックを作成します。

  8. LOAD_JSON_EXCEPTION

    • 例外情報

      readLocalOffset Exception
    • 理由

      1)ブロードキャストモードでは、コンシューマーがローカルのoffsets.jsonファイルをロードするときにエラーが発生します。

      2)破損したfastjsonファイルでも同じ問題が発生する可能性があります。

    • 解決策

      1)使用中のfastjsonバージョンとRocketMQバージョンが一貫しているかどうかを確認してください。

      2)fastjsonバージョンをアップグレードします。

  9. SAME_GROUP_DIFFERENT_TOPIC

    • 例外情報

      the consumer's group info/subscription not exist
    • 理由 1)コンシューマーのトピック情報へのサブスクリプションが存在しません。

    • 解決策

      1)コンシューマーが属するコンシューマーグループが存在するかどうかを確認します。

      2)コンシューマーがサブスクライブしているトピックが存在するかどうかを確認します。

  10. MQLIST_NOT_EXIST

    • 例外情報

      Can not find Message Queue for this topic
    • 理由 1)プロデューサーの場合、トピックに基づいて対応するキュー情報を取得できませんでした。

    • 解決策

      1)トピックのキュー情報が正しく構成されていることを確認します。

      2)トピックに対応するキューに少なくとも2(-w-)権限があることを確認します。

  11. SEND_MSG_FAILED

    • 例外情報

      Send [xxx] times, still failed, cost [xxx]ms, Topic: xxx, BrokersSent ...
    • 理由 1)プロデューサーのメッセージ送信が異常です。SYNCモードでは合計3回送信され、ASYNCおよびONEWAYでは1回送信されます。

    • 解決策 1)プロデューサーのメッセージ送信のタイムアウトパラメーターが小さすぎないかどうか。

      2)ブローカーが正常であることを確認します。

      3)プロデューサーとブローカー間の接続が正常であることを確認します。

  12. UNKNOWN_HOST_EXCEPTION

    • 例外情報

      InetAddress java.net.InetAddress.getLocalHost() throws UnknownHostException
    • 理由

      1)ホストに多くのネットワークインターフェースがあり、1つのインターフェースが複数のIPアドレスにバインドされている可能性があります。

    • 解決策

      1)ホストに対応するIPに正常にアクセスできることを確認し、Pingなどのネットワークコマンドを使用してネットワーク状況を確認します。

5 その他

  1. ブローカーがクラッシュした場合の影響は何ですか?

    1)マスターノードがクラッシュした場合

    メッセージはブローカークラスターに送信できなくなりますが、利用可能な別のブローカークラスターがある場合は、トピックが存在する限りメッセージを送信できます。メッセージはスレーブノードから引き続き消費できます。

    2)一部のスレーブノードがクラッシュした場合

    別の作業中のスレーブがある限り、メッセージの送信には影響しません。コンシューマーグループが最初にスレーブから消費するように設定されていない限り、メッセージの消費には影響しません。デフォルトでは、コンシューマーグループはマスターから消費します。

    3)すべてのスレーブノードがクラッシュした場合

    マスターへのメッセージ送信には影響しませんが、マスターがSYNC_MASTERの場合、プロデューサーはメッセージがどのスレーブにも送信されなかったことを示すSLAVE_NOT_AVAILABLEを取得します。コンシューマーグループが最初にスレーブから消費するように設定されていない限り、メッセージの消費には影響しません。デフォルトでは、コンシューマーグループはマスターから消費します。