创建 Azure Event Hubs 导入主题

借助 Azure Event Hubs 导入主题,您可以将 Azure Event Hubs 作为外部来源,将数据持续提取到 Pub/Sub。然后,您可以将数据流式传输到 Pub/Sub 支持的任何目的地。

本文档介绍了如何创建和管理 Azure Event Hubs 导入主题。如需创建标准主题,请参阅创建标准主题

如需详细了解导入主题,请参阅导入主题简介

准备工作

所需的角色和权限

如需获得创建和管理 Azure Event Hubs 导入主题所需的权限,请让管理员向您授予主题或项目的 Pub/Sub Editor (roles/pubsub.editor) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含创建和管理 Azure Event Hubs 导入主题所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需创建和管理 Azure Event Hubs 导入主题,需要具备以下权限:

  • 创建导入主题: pubsub.topics.create
  • 删除导入主题: pubsub.topics.delete
  • 获取导入主题: pubsub.topics.get
  • 列出导入主题: pubsub.topics.list
  • 发布到导入主题: pubsub.topics.publish
  • 更新导入主题: pubsub.topics.update
  • 获取导入主题的 IAM 政策: pubsub.topics.getIamPolicy
  • 为导入主题配置 IAM 政策 pubsub.topics.setIamPolicy

您也可以使用自定义角色或其他预定义角色来获取这些权限。

您可以在项目级别和个别资源级别配置访问权限控制。

设置联合身份以访问 Azure Event Hubs

借助工作负载身份联合, Google Cloud 服务可以访问 Google Cloud外部运行的工作负载。借助身份联合,您无需维护或传递凭据,即可 Google Cloud 访问其他云中的资源。不过,您可以使用工作负载本身的身份进行身份验证 Google Cloud 并访问资源。

在 Google Cloud中创建服务账号

这是一个可选步骤。 如果您已有服务账号,则可以在本过程中使用该账号,而无需创建新的服务账号。如果您使用的是现有服务账号,请参阅记录服务账号唯一 ID 以了解后续步骤。

对于 Azure Event Hubs 导入主题,Pub/Sub 会使用服务账号作为身份来访问 Azure 中的资源。

如需详细了解如何创建服务账号(包括前提条件、所需角色和权限以及命名准则),请参阅创建服务账号。创建服务账号后,您可能需要等待 60 秒或更长时间才能使用该服务账号。出现这种行为的原因是读取操作是最终一致的;新服务账号可能需要一段时间才能显示。

记录服务账号唯一 ID

您需要服务账号唯一 ID 才能在 Azure 中设置应用注册。

  1. 在 Google Cloud 控制台中,前往服务账号详情页面。

    前往服务账号

  2. 点击您刚刚创建的服务账号或您打算使用的服务账号。

  3. 服务账号详情页面中,记录唯一 ID 编号。

    您需要在工作流程中使用此 ID 来设置在 Azure 中注册应用

向 Pub/Sub 服务账号添加 Service Account Token Creator 角色

Service Account Token Creator 角色 (roles/iam.serviceAccountTokenCreator) 可让主账号为服务账号创建短期有效凭据。这些令牌或凭据用于模拟服务账号。

如需详细了解服务账号模拟,请参阅服务账号模拟

您还可以在此过程中添加 Pub/Sub Publisher 角色 (roles/pubsub.publisher)。如需详细了解该角色以及添加该角色的原因,请参阅向 Pub/Sub 服务账号添加 Pub/Sub 发布商角色

  1. 在 Google Cloud 控制台中,转到 IAM 页面。

    转到 IAM

  2. 点击包括 Google提供的角色授权复选框。

  3. 查找格式为 service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com 的服务账号。

  4. 对于此服务账号,点击修改主账号按钮。

  5. 根据需要,点击添加其他角色

  6. 搜索并点击 Service account token creator 角色 (roles/iam.serviceAccountTokenCreator)。

  7. 点击保存

使用身份联合创建应用注册

如需从 Azure Event Hubs 提取数据,请向 Microsoft Identity Platform 注册应用,并为您的服务账号启用身份联合。这样,您的服务账号就可以对 Azure 进行身份验证。

如需详细了解如何向 Microsoft Identity Platform 注册应用,请参阅 Azure 应用注册快速入门

  1. 登录 Azure 门户,然后打开 Microsoft Entra ID 页面。

  2. 在导航窗格中,依次点击管理 > 应用注册

  3. 点击 New registration(新注册)。

  4. 为应用命名,并将支持的账号类型设为除仅限个人 Microsoft 账号以外的任何类型。

  5. 如需注册应用,请点击注册

  6. 打开该应用,然后依次点击 Manage(管理)> Certificates & Secrets(证书和密钥)。

  7. 点击添加凭据

  8. 如需配置联合凭据,请点击 Other issuer(其他颁发者)。

  9. 对于颁发者字段,输入 https://accounts.google.com

  10. 字段中,输入您的 Pub/Sub 服务账号的唯一 ID。

    您可以在记录服务账号唯一 ID 中找到此 ID。

  11. 为联合身份命名,然后点击添加

向已注册的应用授予角色分配

若要让 Pub/Sub 能够从 Azure Event Hub 读取数据,请向已注册的应用授予必要的角色。

  1. 登录 Azure 门户,然后打开您的 Event Hubs 命名空间。

    如需打开某个命名空间,请在搜索框中输入 Event Hubs,然后点击其中一个命名空间。

  2. 在边栏中,点击访问控制 (IAM)

  3. 依次点击添加 > 添加角色分配

  4. 选择 Azure Event Hubs Data Receiver 角色,然后点击 Next

    这会向 Pub/Sub 服务账号授予对您的 Azure 事件中心的读取权限。

  5. 点击 + 选择成员,然后搜索您已注册的应用。

  6. 在搜索字段中输入已注册的应用名称。

  7. 点击应用的名称,然后点击选择

  8. 点击检查 + 分配

  9. 重复第 3-6 步,然后添加 Azure Event Hubs Data Sender 角色。

    此角色会授予 Google Cloud 服务账号从 Azure Event Hub 提取元数据的权限。

如需详细了解如何分配 Azure 角色,请访问分配 Azure 角色页面。

将 Pub/Sub 发布商角色添加到 Pub/Sub 正文

如需启用发布功能,您必须向 Pub/Sub 服务账号分配发布商角色,以便 Pub/Sub 能够向 Azure Event Hubs 导入主题发布消息。

启用从所有主题发布内容

如果您尚未创建任何 Azure Event Hubs 导入主题,请使用此方法。

  1. 在 Google Cloud 控制台中,转到 IAM 页面。

    转到 IAM

  2. 点击包括 Google提供的角色授权复选框。

  3. 查找格式为 service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com 的服务账号。

  4. 对于此服务账号,点击修改主账号按钮。

  5. 根据需要,点击添加其他角色

  6. 搜索并点击 Pub/Sub 发布商角色 (roles/pubsub.publisher)。

  7. 点击保存

启用从单个主题发布

仅当 Azure Event Hubs 导入主题已存在时,才使用此方法。

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 运行 gcloud pubsub topics add-iam-policy-binding 命令:

    gcloud pubsub topics add-iam-policy-binding TOPIC_ID \
       --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com" \
       --role="roles/pubsub.publisher"

    替换以下内容:

    • TOPIC_ID:Azure Event Hubs 导入主题的主题 ID。

    • PROJECT_NUMBER:项目编号。如需查看项目编号,请参阅标识项目

向服务账号添加服务账号用户角色

Service Account User 角色 (roles/iam.serviceAccountUser) 包含 iam.serviceAccounts.actAs 权限,可让主账号将服务账号附加到 Azure Event Hubs 导入主题的提取设置,并使用该服务账号进行联合身份验证。

  1. 在 Google Cloud 控制台中,转到 IAM 页面。

    转到 IAM

  2. 对于发出创建或更新主题调用的主账号,请点击修改主账号按钮。

  3. 根据需要,点击添加其他角色

  4. 搜索并点击 Service Account User 角色 (roles/iam.serviceAccountUser)。

  5. 点击保存

使用 Azure 事件中心导入主题

您可以创建新的导入主题,也可以修改现有主题。

注意事项

  • 分别创建主题和订阅(即使是快速连续创建)可能会导致数据丢失。在订阅之前,主题会存在一小段时间。如果在此期间向主题发送了任何数据,这些数据将丢失。通过先创建主题、创建订阅,然后将主题转换为导入主题,您可以确保在导入过程中不会遗漏任何消息。

  • 如果您需要重新创建同名现有导入主题的 Azure Event Hub,则不能删除 Azure Event Hub 并重新创建。此操作可能会使 Pub/Sub 的偏移量管理失效,从而导致数据丢失。如需缓解此问题,请按以下步骤操作:

    • 删除 Pub/Sub 导入主题
    • 删除 Azure 事件中心
    • 创建 Azure 事件中心
    • 创建 Pub/Sub 导入主题
  • 系统始终从 earliest offset(最早的偏移量)读取 Azure Event Hub 中的数据。

创建 Azure Event Hubs 导入主题

如需详细了解与主题关联的属性,请参阅主题的属性

确保您已完成以下步骤:

如需创建 Azure Event Hubs 导入主题,请按以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,前往主题页面。

    转到“主题”

  2. 点击创建主题

  3. 主题 ID 字段中,输入 Azure Event Hubs 导入主题的 ID。如需详细了解如何命名主题,请参阅命名准则

  4. 选择添加默认订阅

  5. 选择启用提取

  6. 对于提取来源,请选择 Azure Event Hubs

  7. 输入以下详细信息:

    • 资源组:包含您计划提取到 Pub/Sub 的 Azure Event Hubs 命名空间的 Azure 资源组的名称。

    • 事件中心命名空间:包含您计划提取到 Pub/Sub 的 Azure 事件中心的 Azure 事件中心命名空间的名称。

    • 事件中心:您计划提取到 Pub/Sub 的 Azure 事件中心的名称。

    • 客户端 ID:Azure 中已注册应用的应用(客户端)ID,其中包含 Google Cloud 服务账号的联合身份。此值应为 UUID。如需了解详情,请访问 Azure 应用注册页面

    • 租户 ID:您计划提取到 Pub/Sub 的 Azure 事件中心所属租户的目录 (租户) ID。此值应为 UUID。如需查找租户 ID,请访问 Azure“获取订阅和租户 ID”页面

    • 订阅 ID:拥有 Azure Event Hubs 资源组的订阅的订阅 ID。此值应为 UUID。如需查找订阅 ID,请访问 Azure“获取订阅和租户 ID”页面

    • 服务账号:您在在 Google Cloud中创建服务账号中创建的服务账号。

  8. 其余字段保留默认值。

  9. 点击创建主题

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 运行 gcloud pubsub topics create 命令:

    gcloud pubsub topics create TOPIC_ID \
      --azure-event-hubs-ingestion-resource-group RESOURCE_GROUP \
      --azure-event-hubs-ingestion-namespace NAMESPACE \
      --azure-event-hubs-ingestion-event-hub EVENT_HUB \
      --azure-event-hubs-ingestion-client-id CLIENT_ID \
      --azure-event-hubs-ingestion-tenant-id TENANT_ID \
      --azure-event-hubs-ingestion-subscription-id SUBSCRIPTION_ID \
      --azure-event-hubs-ingestion-service-account SERVICE_ACCOUNT

    替换以下内容:

  • TOPIC_ID:您的 Pub/Sub 主题的名称或 ID。
  • RESOURCE_GROUP:包含您计划提取到 Pub/Sub 的 Azure Event Hubs 命名空间的 Azure Event Hubs 资源组的名称。
  • NAMESPACE:Azure 事件中心命名空间的名称,其中包含您计划提取到 Pub/Sub 的 Azure 事件中心。
  • EVENT_HUB:您计划提取到 Pub/Sub 的 Azure 事件中心的名称。
  • CLIENT_ID:Azure 中已注册应用的应用(客户端)ID,其中包含Google Cloud 服务账号的联合身份。此值应为 UUID。如需了解详情,请访问 Azure 应用注册页面
  • TENANT_ID:您计划提取到 Pub/Sub 的 Azure 事件中心所属租户的目录 (租户) ID。此值应为 UUID。 如需查找租户 ID,请访问 Azure“获取订阅和租户 ID”页面
  • SUBSCRIPTION_ID:拥有您计划提取到 Pub/Sub 的 Azure 事件中心的订阅的订阅 ID。此值应为 UUID。如需查找订阅 ID,请访问 Azure“获取订阅和租户 ID”页面
  • SERVICE_ACCOUNT:您在在 Google Cloud 中创建服务账号 Google Cloud中创建的服务账号

Go

在尝试此示例之前,请按照 Pub/Sub 快速入门:使用客户端库中的 Go 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Go API 参考文档

如需向 Pub/Sub 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsub"
)

func createTopicWithAzureEventHubsIngestion(w io.Writer, projectID, topicID, resourceGroup, namespace, eventHub, clientID, tenantID, subID, gcpSA string) error {
	// projectID := "my-project-id"
	// topicID := "my-topic"

	// // Azure Event Hubs ingestion settings.
	// resourceGroup := "resource-group"
	// namespace := "namespace"
	// eventHub := "event-hub"
	// clientID := "client-id"
	// tenantID := "tenant-id"
	// subID := "subscription-id"
	// gcpSA := "gcp-service-account"

	ctx := context.Background()
	client, err := pubsub.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %w", err)
	}
	defer client.Close()

	cfg := &pubsub.TopicConfig{
		IngestionDataSourceSettings: &pubsub.IngestionDataSourceSettings{
			Source: &pubsub.IngestionDataSourceAzureEventHubs{
				ResourceGroup:     resourceGroup,
				Namespace:         namespace,
				EventHub:          eventHub,
				ClientID:          clientID,
				TenantID:          tenantID,
				SubscriptionID:    subID,
				GCPServiceAccount: gcpSA,
			},
		},
	}
	t, err := client.CreateTopicWithConfig(ctx, topicID, cfg)
	if err != nil {
		return fmt.Errorf("CreateTopic: %w", err)
	}
	fmt.Fprintf(w, "Created topic with azure event hubs ingestion: %v\n", t)
	return nil
}

Java

在尝试此示例之前,请按照 Pub/Sub 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Java API 参考文档

如需向 Pub/Sub 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证


import com.google.cloud.pubsub.v1.TopicAdminClient;
import com.google.pubsub.v1.IngestionDataSourceSettings;
import com.google.pubsub.v1.Topic;
import com.google.pubsub.v1.TopicName;
import java.io.IOException;

public class CreateTopicWithAzureEventHubsIngestionExample {
  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String topicId = "your-topic-id";
    // Azure Event Hubs ingestion settings.
    String resourceGroup = "resource-group";
    String namespace = "namespace";
    String eventHub = "event-hub";
    String clientId = "client-id";
    String tenantId = "tenant-id";
    String subscriptionId = "subscription-id";
    String gcpServiceAccount = "gcp-service-account";

    createTopicWithAzureEventHubsIngestionExample(
        projectId,
        topicId,
        resourceGroup,
        namespace,
        eventHub,
        clientId,
        tenantId,
        subscriptionId,
        gcpServiceAccount);
  }

  public static void createTopicWithAzureEventHubsIngestionExample(
      String projectId,
      String topicId,
      String resourceGroup,
      String namespace,
      String eventHub,
      String clientId,
      String tenantId,
      String subscriptionId,
      String gcpServiceAccount)
      throws IOException {
    try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
      TopicName topicName = TopicName.of(projectId, topicId);

      IngestionDataSourceSettings.AzureEventHubs azureEventHubs =
          IngestionDataSourceSettings.AzureEventHubs.newBuilder()
              .setResourceGroup(resourceGroup)
              .setNamespace(namespace)
              .setEventHub(eventHub)
              .setClientId(clientId)
              .setTenantId(tenantId)
              .setSubscriptionId(subscriptionId)
              .setGcpServiceAccount(gcpServiceAccount)
              .build();
      IngestionDataSourceSettings ingestionDataSourceSettings =
          IngestionDataSourceSettings.newBuilder().setAzureEventHubs(azureEventHubs).build();

      Topic topic =
          topicAdminClient.createTopic(
              Topic.newBuilder()
                  .setName(topicName.toString())
                  .setIngestionDataSourceSettings(ingestionDataSourceSettings)
                  .build());

      System.out.println(
          "Created topic with Azure Event Hubs ingestion settings: " + topic.getAllFields());
    }
  }
}

Node.js

在尝试此示例之前,请按照 Pub/Sub 快速入门:使用客户端库中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Node.js API 参考文档

如需向 Pub/Sub 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
// const resourceGroup = 'YOUR_RESOURCE_GROUP';
// const namespace = 'YOUR_NAMESPACE';
// const eventHub = 'YOUR_EVENT_HUB';
// const clientId = 'YOUR_CLIENT_ID';
// const tenantId = 'YOUR_TENANT_ID';
// const subscriptionId = 'YOUR_SUBSCRIPTION_ID';
// const gcpServiceAccount = 'ingestion-account@...';

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client; cache this for further use
const pubSubClient = new PubSub();

async function createTopicWithAzureEventHubsIngestion(
  topicNameOrId,
  resourceGroup,
  namespace,
  eventHub,
  clientId,
  tenantId,
  subscriptionId,
  gcpServiceAccount
) {
  // Creates a new topic with Azure Event Hubs ingestion.
  await pubSubClient.createTopic({
    name: topicNameOrId,
    ingestionDataSourceSettings: {
      azureEventHubs: {
        resourceGroup,
        namespace,
        eventHub,
        clientId,
        tenantId,
        subscriptionId,
        gcpServiceAccount,
      },
    },
  });
  console.log(
    `Topic ${topicNameOrId} created with Azure Event Hubs ingestion.`
  );
}

Python

在尝试此示例之前,请按照 Pub/Sub 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Python API 参考文档

如需向 Pub/Sub 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

from google.cloud import pubsub_v1
from google.pubsub_v1.types import Topic
from google.pubsub_v1.types import IngestionDataSourceSettings

# TODO(developer)
# project_id = "your-project-id"
# topic_id = "your-topic-id"
# resource_group = "your-resource-group"
# namespace = "your-namespace"
# event_hub = "your-event-hub"
# client_id = "your-client-id"
# tenant_id = "your-tenant-id"
# subscription_id = "your-subscription-id"
# gcp_service_account = "your-gcp-service-account"

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project_id, topic_id)

request = Topic(
    name=topic_path,
    ingestion_data_source_settings=IngestionDataSourceSettings(
        azure_event_hubs=IngestionDataSourceSettings.AzureEventHubs(
            resource_group=resource_group,
            namespace=namespace,
            event_hub=event_hub,
            client_id=client_id,
            tenant_id=tenant_id,
            subscription_id=subscription_id,
            gcp_service_account=gcp_service_account,
        )
    ),
)

topic = publisher.create_topic(request=request)

print(f"Created topic: {topic.name} with Azure Event Hubs Ingestion Settings")

C++

在尝试此示例之前,请按照 Pub/Sub 快速入门:使用客户端库中的 C++ 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub C++ API 参考文档

如需向 Pub/Sub 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

namespace pubsub = ::google::cloud::pubsub;
namespace pubsub_admin = ::google::cloud::pubsub_admin;
[](pubsub_admin::TopicAdminClient client, std::string project_id,
   std::string topic_id, std::string const& resource_group,
   std::string const& event_hubs_namespace, std::string const& event_hub,
   std::string const& client_id, std::string const& tenant_id,
   std::string const& subscription_id,
   std::string const& gcp_service_account) {
  google::pubsub::v1::Topic request;
  request.set_name(
      pubsub::Topic(std::move(project_id), std::move(topic_id)).FullName());
  auto* azure_event_hubs = request.mutable_ingestion_data_source_settings()
                               ->mutable_azure_event_hubs();
  azure_event_hubs->set_resource_group(resource_group);
  azure_event_hubs->set_namespace_(event_hubs_namespace);
  azure_event_hubs->set_event_hub(event_hub);
  azure_event_hubs->set_client_id(client_id);
  azure_event_hubs->set_tenant_id(tenant_id);
  azure_event_hubs->set_subscription_id(subscription_id);
  azure_event_hubs->set_gcp_service_account(gcp_service_account);

  auto topic = client.CreateTopic(request);
  // Note that kAlreadyExists is a possible error when the library retries.
  if (topic.status().code() == google::cloud::StatusCode::kAlreadyExists) {
    std::cout << "The topic already exists\n";
    return;
  }
  if (!topic) throw std::move(topic).status();

  std::cout << "The topic was successfully created: " << topic->DebugString()
            << "\n";
}

Node.js (TypeScript)

在尝试此示例之前,请按照《Pub/Sub 快速入门:使用客户端库》中的 Node.js 设置说明执行操作。 如需了解详情,请参阅 Pub/Sub Node.js API 参考文档

如需向 Pub/Sub 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
// const resourceGroup = 'YOUR_RESOURCE_GROUP';
// const namespace = 'YOUR_NAMESPACE';
// const eventHub = 'YOUR_EVENT_HUB';
// const clientId = 'YOUR_CLIENT_ID';
// const tenantId = 'YOUR_TENANT_ID';
// const subscriptionId = 'YOUR_SUBSCRIPTION_ID';
// const gcpServiceAccount = 'ingestion-account@...';

// Imports the Google Cloud client library
import {PubSub} from '@google-cloud/pubsub';

// Creates a client; cache this for further use
const pubSubClient = new PubSub();

async function createTopicWithAzureEventHubsIngestion(
  topicNameOrId: string,
  resourceGroup: string,
  namespace: string,
  eventHub: string,
  clientId: string,
  tenantId: string,
  subscriptionId: string,
  gcpServiceAccount: string
) {
  // Creates a new topic with Azure Event Hubs ingestion.
  await pubSubClient.createTopic({
    name: topicNameOrId,
    ingestionDataSourceSettings: {
      azureEventHubs: {
        resourceGroup,
        namespace,
        eventHub,
        clientId,
        tenantId,
        subscriptionId,
        gcpServiceAccount,
      },
    },
  });
  console.log(
    `Topic ${topicNameOrId} created with Azure Event Hubs ingestion.`
  );
}

如果您遇到问题,请参阅“排查 Azure Event Hubs 导入问题”主题

修改 Azure 事件中心导入主题

如需修改 Azure Event Hubs 导入主题的数据提取数据源设置,请按以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,前往主题页面。

    转到“主题”

  2. 点击“Azure Event Hubs 导入”主题。

  3. 在主题详情页面中,点击修改

  4. 更新您要更改的字段。

  5. 点击更新

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 使用以下示例中提到的所有标志运行 gcloud pubsub topics update 命令:

    gcloud pubsub topics update TOPIC_ID \
        --azure-event-hubs-ingestion-resource-group RESOURCE_GROUP \
        --azure-event-hubs-ingestion-namespace NAMESPACE \
        --azure-event-hubs-ingestion-event-hub EVENT_HUB \
        --azure-event-hubs-ingestion-client-id CLIENT_ID \
        --azure-event-hubs-ingestion-tenant-id TENANT_ID \
        --azure-event-hubs-ingestion-subscription-id SUBSCRIPTION_ID \
        --azure-event-hubs-ingestion-service-account SERVICE_ACCOUNT

    替换以下内容:

    • TOPIC_ID:您的 Pub/Sub 主题的名称或 ID。
    • RESOURCE_GROUP:包含要提取到 Pub/Sub 的 Azure Event Hubs 命名空间的 Azure Event Hubs 资源组的名称。
    • NAMESPACE:包含要提取到 Pub/Sub 的 Azure 事件中心的 Azure Event Hubs 命名空间的名称。
    • EVENT_HUB:要提取到 Pub/Sub 的 Azure 事件中心的名称。
    • CLIENT_ID:Azure 中已注册应用的应用(客户端)ID,其中包含Google Cloud 服务账号的联合身份。此值应为 UUID。 如需了解详情,请参阅 Azure 应用注册页面
    • TENANT_ID:您要将其数据提取到 Pub/Sub 的 Azure 事件中心所属的租户的目录 (租户) ID。此值应为 UUID。如需查找租户 ID,请参阅访问“获取订阅和租户 ID”页面
    • SUBSCRIPTION_ID:拥有您要提取到 Pub/Sub 的 Azure 事件中心的订阅的订阅 ID。此值应为 UUID。如需查找订阅 ID,请参阅 Azure 获取订阅 ID 和租户 ID
    • SERVICE_ACCOUNT:您在在 Google Cloud中创建服务账号中创建的服务账号

配额和限制

导入主题的发布者吞吐量受主题的发布配额的约束。如需了解详情,请参阅 Pub/Sub 配额和限制

后续步骤