Pub/Sub を使用してメッセージをパブリッシュするために、パブリッシャー アプリケーションによってメッセージが作成され、トピックに送信されます。
このドキュメントでは、トピックとメッセージのコンセプトなど、パブリッシュ ワークフローの概要について説明します。
トピックについて
Pub/Sub トピックは、メッセージのフィードを表す名前付きリソースです。パブリッシャーがメッセージを送信する場合、特定のトピックをターゲットにします。Pub/Sub サービスは、このトピック名を使用して、トピックにアタッチされているすべてのサブスクリプションにメッセージを転送します。サブスクリプションに複数のサブスクライバーがある場合、サブスクリプション内の 1 つのサブスクライバーのみがメッセージを受信します。
パブリッシャーは、サブスクライバーの数を把握している必要はありません。トピックに焦点を当てることで、メッセージの送信とメッセージの受信の懸念事項を分離できます。
Pub/Sub では、標準トピックとインポート トピックの 2 種類のトピックがサポートされています。
トピックのプロパティ
トピックを作成または更新するときに、トピック プロパティを指定できます。
トピックのプロパティの詳細については、トピックのプロパティをご覧ください。
インポート トピックについて
インポート トピックを使用すると、Pub/Sub は別のソースからストリーミング データを取り込み、データをトピックに送信するパブリッシャー アプリケーションとして機能します。トピックの取り込みを有効にするには、コンソール、Google Cloud CLI、REST 呼び出し、またはクライアント ライブラリを使用します。インポート トピックの管理の一環として、Google Cloud は取り込みパイプラインのモニタリングとスケーリングを提供します。
インポート トピックがない場合、データソースから Pub/Sub にデータをストリーミングするには、追加のサービスが必要になります。この追加サービスは、元のソースからデータを pull して Pub/Sub に公開します。追加サービスとしては、Apache Spark などのストリーミング エンジンやカスタム作成サービスなどがあります。また、このサービスの構成、デプロイ、実行、スケーリング、モニタリングも必要です。
インポート トピックに関する重要な情報を次に示します。
標準のトピックと同様に、インポート トピックに手動で公開できます。
インポート トピックに接続できる取り込みソースは 1 つのみです。
ストリーミング データのトピックをインポートすることをおすすめします。ストリーミング データの取り込みではなく BigQuery へのバッチデータの取り込みを検討している場合は、BigQuery Data Transfer Service(BQ DTS)を試すことができます。Cloud Storage にデータを取り込む場合は、Storage Transfer Service(STS)がおすすめです。
Pub/Sub は、インポート トピックの次のソースをサポートしています。
トピック内のデータ レプリケーション
Pub/Sub トピックは、3 つのゾーンを使用してデータを保存します。このサービスでは、少なくとも 2 つのゾーンに対する同期レプリケーションと、追加 の 3 つ目のゾーンに対するベスト エフォート レプリケーションをサポートします。Pub/Sub レプリケーションは 1 つのリージョン内でのみ行われます。
メッセージについて
Pub/Sub メッセージは、サービスを通じて移動するデータです。
メッセージは、メッセージ データとメタデータを含むフィールドで構成されます。メッセージで次のいずれかを指定する必要があります。
メッセージ データ: メッセージのコア コンテンツで、任意のテキストまたはバイナリデータにすることができます。これは、パブリッシャーとサブスクライバー間で通信する実際の情報を表します。REST API を直接使用している場合、メッセージ データは Base64 でエンコードされている必要があります。[REST] タブの [メッセージをパブリッシュする] セクションの例をご覧ください。
順序指定キー: メッセージを順序付ける必要があるエンティティを表す識別子。同じ順序指定キーを持つメッセージは、パブリッシュされた順序でサブスクライバーに配信されることが期待されます。順序指定キーは、メッセージを順序指定で配信する場合にのみ必要です。順序指定キーの詳細については、順序メッセージをご覧ください。
属性: メッセージに関する追加のコンテキストと情報を提供するオプションの Key-Value ペアです。これらのフィールドは、メッセージ コンテンツのルーティング、フィルタリング、拡充に使用できます。たとえば、タイムスタンプやトランザクション ID などの属性を追加できます。メッセージの公開で使用される属性の詳細については、属性を使用してメッセージをパブリッシュするをご覧ください。
Pub/Sub サービスは、次のフィールドをメッセージに追加します。
- トピックに一意のメッセージ ID
- Pub/Sub サービスがメッセージを受信した時点のタイムスタンプ
たとえば、JSON 形式のメッセージ フォーマットは次のとおりです。
{
"data": "This is the core message content.",
"attributes": {
"category": "notification",
"user_id": "12345",
"priority": "medium"
},
"orderingKey": "12345"
}
メッセージをパブリッシュするワークフロー
Pub/Sub を使用してメッセージをパブリッシュするために、パブリッシャー アプリケーションによってメッセージが作成され、トピックに送信されます。
- データを含むメッセージを作成します。
- パブリッシュ属性(オプション)を選択します。
- リクエストを Pub/Sub サーバーに送信し、指定されたトピックにメッセージをパブリッシュします。
Pub/Sub サービスはメッセージを受信し、次のように処理します。
メッセージは配信用に保存されます。
耐久性と高可用性を実現するために、メッセージは複数のゾーンに複製されます。
Pub/Sub は、メッセージのトピックに一致するサブスクリプションを持つサブスクライバーを特定し、各サブスクライバーにメッセージのコピーを配信します。
Pub/Sub では、既存のサブスクライバーに対して、メッセージの at-least-once 配信とベストエフォートの順序指定を実施しています。
Pub/Sub システムの詳細については、Pub/Sub サービスの概要をご覧ください。
Pub/Sub の仕組みの詳細については、Pub/Sub のアーキテクチャの概要をご覧ください。