すべてのプロダクト
Search
ドキュメントセンター

ApsaraMQ for RocketMQ:Topic

最終更新日:Nov 10, 2025

このトピックでは、ApsaraMQ for RocketMQ の Topic の定義、モデル関係、内部属性、動作の制約、バージョンの互換性、および使用上の注意について説明します。

定義

ApsaraMQ for RocketMQ では、Topic はメッセージを転送および保存するための最上位のコンテナーです。Topic は、同じビジネスロジックを共有するメッセージを識別します。

Topic には次の利点があります。

  • データの分類と隔離

    ApsaraMQ for RocketMQ を使用するソリューションを設計する際に、さまざまなトピックを作成して、さまざまな業務タイプのメッセージを管理できます。この方法により、隔離されたストレージとサブスクリプションが保証されます。

  • ID と権限管理

    ApsaraMQ for RocketMQ のメッセージは匿名です。Topic を使用して、特定のカテゴリのメッセージの ID と権限を管理できます。

モデル関係

次の図は、ApsaraMQ for RocketMQ のドメインモデルにおける Topic の位置を示しています。

主题

ApsaraMQ for RocketMQ では、Topic はすべてのメッセージリソースの最上位のコンテナーです。ただし、Topic は論理的な概念であり、実際のメッセージコンテナーではありません。

Topic は、メッセージストレージと水平スケーリングを処理する 1 つ以上のキューで構成されます。Topic のすべての制約と属性設定は、キューレベルで実装されます。

Topic が Lite タイプの場合、その下に LiteTopic リソースを作成できます。デフォルトでは、各 LiteTopic は 1 つのキューで構成されます。

概念

Topic

ApsaraMQ for RocketMQ では、Topic はメッセージを転送および保存するための最上位のコンテナーです。同じビジネスロジックを共有するメッセージを識別し、その Topic 名によって一意に識別されます。

LiteTopic

Topic が Lite タイプの場合、その下に LiteTopic を作成できます。Topic と LiteTopic の組み合わせにより、メッセージストレージコンテナーが一意に識別されます。デフォルトでは、各ストレージコンテナーは 1 つのキューで構成されます。

内部属性

Topic 名

  • 定義: Topic の名前。名前はクラスター内でグローバルに一意である必要があり、Topic を識別するために使用されます。

  • 値: Topic の作成時に Topic 名を指定できます。

  • 制約: 詳細については、「パラメーターの制約」をご参照ください。

キュー

  • 定義: キューは Topic の基盤となるコンポーネントであり、メッセージストレージの実際のコンテナーとして機能します。Topic には、メッセージが保存される 1 つ以上のキューが含まれます。詳細については、「キュー (MessageQueue)」をご参照ください。

  • 値: システムは、指定されたキュー数に基づいて Topic にキューを割り当てます。Topic の作成時にキューの数を定義します。

  • 制約: Topic には少なくとも 1 つのキューが含まれている必要があります。

メッセージタイプ

  • 定義: Topic がサポートするメッセージタイプ。

  • 値: Topic の作成時にメッセージタイプを選択できます。ApsaraMQ for RocketMQ は、次の Topic タイプをサポートしています。

    • 通常: 通常メッセージ。通常メッセージには特別なセマンティクスはなく、他のメッセージと相関関係はありません。

    • FIFO: 順序メッセージApsaraMQ for RocketMQ は、メッセージグループ (MessageGroup) を使用してメッセージセットの順序を指定します。これにより、メッセージが送信された順序どおりに配信されることが保証されます。

    • 遅延: スケジュール/遅延メッセージ。遅延時間を指定して、メッセージが送信直後に配信されないようにすることができます。メッセージは、指定された遅延時間が経過した後にのみコンシューマーに表示されます。

    • トランザクション: トランザクションメッセージApsaraMQ for RocketMQ は、分散トランザクションメッセージをサポートしています。データベースの更新とメッセージの呼び出しのトランザクションの一貫性を保証します。

    • Lite: Lite メッセージ。LiteTopic 機能は、Lite メッセージタイプの Topic でのみ使用できます。

  • 制約: 各 Topic は 1 つのメッセージタイプのみをサポートします。

LiteTopic の有効期限

  • 定義: Topic 内の LiteTopic リソースの有効期限。最後のメッセージが書き込まれてからの時間が指定された有効期限を超えると、LiteTopic は自動的に削除されます。

  • 値: 値は分単位で、30 から 720 までの数値、または -1 を指定できます。値 -1 は、LiteTopic が期限切れにならないことを示します。

  • 制限: このパラメーターは、メッセージタイプが Lite の場合にのみ有効です。

動作の制約

強制的なメッセージタイプの検証

ApsaraMQ for RocketMQ 5.x では、メッセージタイプは Topic 内で独立して管理および処理されます。システムは、送信されたメッセージのタイプを宛先 Topic に定義されているメッセージタイプと照合して検証します。検証に失敗した場合、送信リクエストは拒否され、システムはタイプ不一致の例外を返します。次の検証ルールが適用されます。

  • メッセージタイプの一貫性

    送信されたメッセージのタイプは、宛先 Topic に定義されているメッセージタイプと一致する必要があります。

  • Topic ごとの単一メッセージタイプ

    各 Topic は 1 つのメッセージタイプのみをサポートします。同じ Topic に異なるタイプのメッセージを送信することはできません。

一般的な誤った使用シナリオ

  • 不一致のタイプのメッセージを送信する

    たとえば、Topic を作成し、そのメッセージタイプを順序付きとして定義したが、この Topic にトランザクションメッセージを送信した場合、送信リクエストは拒否され、タイプ不一致の例外が返されます。

  • 単一の Topic でメッセージタイプを混在させる

    たとえば、Topic を作成し、そのメッセージタイプを通常として定義します。その後、この Topic に通常メッセージと順序メッセージの両方を送信すると、順序メッセージを送信するリクエストは拒否され、タイプ不一致の例外が返されます。

バージョンの互換性

強制的なメッセージタイプの検証は、ApsaraMQ for RocketMQ 5.x ブローカーにのみ適用されます。

ApsaraMQ for RocketMQ 4.x ブローカーは、メッセージタイプの検証を強制しません。ただし、これらのブローカーを使用する場合は、メッセージタイプの一貫性を維持することをお勧めします。

使用上の注意

業務カテゴリに基づいて Topic を計画する

ApsaraMQ for RocketMQ で Topic を設計する場合、主要な業務カテゴリ別にメッセージをグループ化することをお勧めします。同じビジネスドメイン内で同じ機能属性を持つメッセージを単一の Topic にグループ化します。Topic の粒度を決定する際には、次の要素を考慮してください。

  • メッセージタイプの一貫性: 順序メッセージや通常メッセージなど、メッセージタイプが異なると、異なる Topic が必要になります。

  • ビジネスの関連性: ビジネスが直接関連していない場合は、異なる Topic を使用してください。たとえば、Taobao のトランザクションメッセージと Freshippo の物流メッセージにはビジネスの重複がなく、異なる Topic が必要です。Taobao のトランザクションメッセージなど、同じビジネス内のメッセージについては、婦人服と紳士服の両方の注文に同じ Topic を使用できます。ただし、ビジネスボリュームが大きい場合や、サブモジュールで注文タイプをさらに分類する必要がある場合は、メッセージを紳士服と婦人服の注文用に 2 つの別々の Topic に分割することもできます。

  • メッセージ量: マグニチュードや適時性の要件が異なるビジネスメッセージには、異なる Topic を使用することをお勧めします。たとえば、一部のビジネスメッセージは量が非常に少ないですが、時間的制約が非常に厳しいです。これらのメッセージが大量のメッセージを生成するビジネスと Topic を共有すると、時間的制約の厳しいメッセージの待機時間が増加します。

正しい Topic 分割の例: オンラインショッピングのシナリオでは、注文の作成、支払い、キャンセルなどの注文トランザクションメッセージに 1 つの Topic を使用できます。物流関連のメッセージには別の Topic を使用し、ポイント管理メッセージにはさらに別の Topic を使用できます。

誤った Topic 分割の例:

  • 粗すぎる粒度での分割: これにより、ビジネスの隔離が不十分になり、独立した O&M とエラー処理が複雑になります。例としては、すべてのトランザクションメッセージと物流メッセージに単一の Topic を使用することが挙げられます。

  • 細かすぎる粒度での分割: これにより、過剰な Topic リソースが消費され、システムに過負荷がかかる可能性があります。例としては、ユーザー ID ごとに個別の Topic を作成することが挙げられます。

1 つのメッセージタイプに 1 つの Topic を使用し、タイプの混在を避ける

ApsaraMQ for RocketMQ の Topic は、ビジネスを隔離するように設計されています。ビジネスロジックが異なるメッセージには、異なる Topic を使用することをお勧めします。同じビジネスロジックを持つメッセージは、同じメッセージタイプを持ちます。したがって、単一の Topic は 1 種類のメッセージにのみ使用する必要があります。

Topic 管理に自動化されたメカニズムを使用しない

ApsaraMQ for RocketMQ アーキテクチャでは、Topic は最上位のリソースおよびコンテナーです。権限管理、可観測性メトリックの収集、およびモニタリングのための独立した機能を備えています。Topic の作成と管理はシステムリソースを消費します。したがって、本番環境では Topic リソースを厳密に管理する必要があります。Topic を任意に追加、削除、変更、またはクエリしないでください。