事件中心常见问题

常规

什么是 Azure 事件中心命名空间?

命名空间是事件中心/Kafka 主题的范围容器。 命名空间充当容装多个事件中心/Kafka 主题的应用程序容器。

是否可以在部署后更改定价层?

不是。 在部署后,如果没有部署新资源,则无法(例如)从标准层更改为高级层。

何时创建新的命名空间与使用现有命名空间?

容量分配(吞吐量单位 (TU) 或处理单位 (PU))在命名空间级别计费。 命名空间也与区域相关联。

在以下方案之一中,你可能想要创建一个新的命名空间,而不是使用现有命名空间:

  • 需要与新区域关联的事件中心。
  • 需要与其他订阅关联的事件中心。
  • 需要具有不同容量分配的事件中心(也就是说,具有新增事件中心的命名空间的容量需求超过 40 TU 的阈值,并且你不希望使用专用群集)。``

事件中心基本层和标准层有何区别?

Azure 事件中心标准层提供的功能超出了基本层中提供的功能。 以下功能是标准层附带的:

有关定价层的详细信息(包括专用事件中心),请参阅事件中心定价详细信息

Azure 事件中心在哪些区域可用?

在所有支持的 Azure 区域中都可使用 Azure 事件中心。 有关列表,请访问 Azure 区域页。

是否可以使用单个高级消息队列协议 (AMQP) 连接来与多个事件中心相互收发数据?

可以,但前提是所有事件中心都在同一个命名空间中。

事件的最长保留期有多久?

事件中心标准层目前支持最长 7 天保持期,而高级层和专用层的最长保持期为 90 天。 事件中心不应作为永久性的数据存储。 超过 24 小时的保持期适用于可轻松将事件流重播到相同系统中的方案。 例如,基于现有数据训练或验证新机器学习模型。 如果需要将消息保留七天以上,请启用事件中心的事件中心捕获功能,将数据从事件中心提取到所选的存储帐户或 Azure Data Lake 服务帐户。 启用捕获功能需要支付费用,具体因购买的吞吐量单位而异。

可以在存储帐户上配置已捕获数据的保留期。 Azure 存储的“生命周期管理”功能为常规用途 v2 和 blob 存储帐户提供了基于规则的丰富策略。 可使用该策略将数据转移到适当的访问层,或在数据的生命周期结束时使数据过期。 有关详细信息,请参阅管理 Azure Blob 存储生命周期

如何监视事件中心?

事件中心向 Azure Monitor 发出详尽指标用于提供资源的状态。 此外,参考指标不仅可以在命名空间级别,而且还能在实体级别评估事件中心服务的总体运行状况。 了解 Azure 事件中心提供哪些监视功能。

Azure 事件中心将数据存储在何处?

Azure 事件中心标准层、高级层和专用层会在创建事件中心命名空间时选择的区域中存储和处理发布给它的数据。 默认情况下,客户数据保留在该区域中。 为 Azure 事件中心命名空间设置异地灾难恢复时,会将元数据复制到你选择的次要区域。 因此,此服务会自动满足区域内数据驻留要求,包括信任中心内指定的要求。

需要在防火墙上打开哪些端口?

可以将以下协议与 Azure 事件中心配合使用,以便发送和接收事件:

  • 高级消息队列协议 1.0 (AMQP)
  • 具有传输层安全性的超文本传输协议 1.1 (HTTPS)
  • Apache Kafka

请查看下表,了解需要打开哪些出站端口,以便使用这些协议与 Azure 事件中心通信。

协议 端口 详细信息
AMQP 5671 和 5672 请参阅 AMQP 协议指南
HTTPS 443 此端口用于 HTTP/REST API 和 AMQP-over-WebSockets。
Kafka 9093 请参阅使用 Kafka 应用程序中的事件中心

在通过端口 5671 使用 AMQP 时,还需要使用 HTTPS 端口进行出站通信,因为客户端 SDK 执行的一些管理操作和从 Microsoft Entra ID(使用时)获取令牌的操作是通过 HTTPS 运行的。

正式的 Azure SDK 通常使用 AMQP 协议通过事件中心发送和接收事件。 与 HTTP API 一样,AMQP-over-WebSockets 协议选项通过端口 TCP 443 运行,但在功能上与普通 AMQP 相同。 由于额外的握手往返,此选项的初始连接延迟较高,并且作为共享 HTTPS 端口的折衷方案,此选项的开销略高。 如果选择此模式,TCP 端口 443 足以进行通信。 以下选项允许选择普通 AMQP 或 AMQP WebSockets 模式:

语言 选项
.NET 具有 EventHubsTransportType.AmqpTcpEventHubsTransportType.AmqpWebSocketsEventHubConnectionOptions.TransportType 属性
Java 具有 AmqpTransportType.AMQPAmqpTransportType.AMQP_WEB_SOCKETScom.microsoft.azure.eventhubs.EventProcessorClientBuilder.transporttype
节点 EventHubConsumerClientOptions 具有 webSocketOptions 属性。
Python 具有 TransportType.AmqpTransportType.AmqpOverWebSocketEventHubConsumerClient.transport_type

需要允许哪些 IP 地址?

使用 Azure 时,有时必须在公司防火墙或代理中允许特定的 IP 地址范围或 URL 才能访问正在使用或尝试使用的所有 Azure 服务。 确认在事件中心使用的 IP 地址上是否允许该流量。 有关 Azure 事件中心使用的 IP 地址:请参阅 Azure IP 范围和服务标记 - 公有云

另外,请验证是否允许你的命名空间的 IP 地址。 若要查找允许你的连接的正确 IP 地址,请执行以下步骤:

  1. 从命令提示符处运行以下命令:

    nslookup <YourNamespaceName>.servicebus.chinacloudapi.cn
    
  2. 记下 Non-authoritative answer 中返回的 IP 地址。

如果对命名空间使用区域冗余,则需执行一些额外的步骤:

  1. 首先,在命名空间中运行 nslookup。

    nslookup <yournamespace>.servicebus.chinacloudapi.cn
    
  2. 记下“非权威回答”部分中的名称,该名称采用下述格式之一:

    <name>-s1.chinacloudapp.cn
    <name>-s2.chinacloudapp.cn
    <name>-s3.chinacloudapp.cn
    
  3. 为每一个运行 nslookup,使用后缀 s1、s2 和 s3 获取所有三个在三个可用性区域中运行的实例的 IP 地址。

    注意

    nslookup 命令返回的 IP 地址不是静态 IP 地址。 但是,在删除基础部署或将其移至其他群集之前,该地址保持不变。

哪些客户端 IP 正在向/从我的命名空间发送/接收事件?

首先,在命名空间上启用 IP 筛选

然后,按照启用诊断日志中的说明,为事件中心虚拟网络连接事件启用诊断日志。 你会看到连接遭到拒绝的 IP 地址。

{
    "SubscriptionId": "0000000-0000-0000-0000-000000000000",
    "NamespaceName": "namespace-name",
    "IPAddress": "1.2.3.4",
    "Action": "Deny Connection",
    "Reason": "IPAddress doesn't belong to a subnet with Service Endpoint enabled.",
    "Count": "65",
    "ResourceId": "/subscriptions/0000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.eventhub/namespaces/namespace-name",
    "Category": "EventHubVNetConnectionEvent"
}

重要

只有当命名空间允许从特定的 IP 地址(IP 筛选器规则)进行访问时,才会生成虚拟网络日志。 如果不希望使用这些功能限制对命名空间的访问,但仍希望获取虚拟网络日志来跟踪连接到事件中心命名空间的客户端的 IP 地址,可使用以下解决方法:启用 IP 筛选并添加整个可寻址 IPv4 范围 (0.0.0.0/1 - 128.0.0.0/1) 和 IPv6 范围 (::/1 - 8000::/1)。

注意

目前,无法确定单个消息或事件的源 IP。

Apache Kafka 集成

如何将现有的 Kafka 应用程序与事件中心集成?

事件中心提供可由基于 Apache Kafka 的现有应用程序使用的 Kafka 终结点。 只需完成一项配置更改,即可获得 PaaS Kafka 体验。 使用该体验就如同运行自己的 Kafka 群集。 事件中心支持 Apache Kafka 1.0 和更高版本的客户端,并且适用于现有的 Kafka 应用程序、工具和框架。 有关详细信息,请参阅适用于 Kafka 的事件中心存储库

要使现有的应用程序与事件中心通信,需要完成哪些配置更改?

要连接到事件中心,需要更新 Kafka 客户端配置。 为此,可以创建事件中心命名空间并获取连接字符串。 更改 bootstrap.servers,以将事件中心 FQDN 和端口指向 9093。 更新 sasl.jaas.config,以使用正确的身份验证将 Kafka 客户端定向到事件中心终结点(已获取的连接字符串),如下所示:

bootstrap.servers={YOUR.EVENTHUBS.FQDN}:9093
request.timeout.ms=60000
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}";

例如:

bootstrap.servers=dummynamespace.servicebus.chinacloudapi.cn:9093
request.timeout.ms=60000
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://dummynamespace.servicebus.chinacloudapi.cn/;SharedAccessKeyName=DummyAccessKeyName;SharedAccessKey=XXXXXXXXXXXXXXXXXXXXX";

注意

如果 sasl.jaas.config 在框架中不是受支持的配置,请查找用于设置 SASL 用户名和密码的配置,改为使用这些配置。 将用户名设置为 $ConnectionString,将密码设置为事件中心连接字符串。

事件中心的消息/事件大小是多少?

事件中心允许的最大消息大小为 1 MB。

吞吐量单位

什么是事件中心吞吐量单元? (标准层)

事件中心内的吞吐量定义通过事件中心传入和传出的数据量,以 MB 或者 1-KB 事件的数目(以千计)为单位。 此吞吐量以吞吐量单位 (TU) 来计量。 在开始使用事件中心服务之前,需购买 TU。 可以使用门户或事件中心资源管理器模板显式选择事件中心 TU。

吞吐量单位是否适用于命名空间中的所有事件中心?

是的,吞吐量单位 (TU) 适用于事件中心命名空间中的所有事件中心。 这意味着,TU 是在命名空间级别购买的,并在该命名空间下的事件中心之间共享。 每个 TU 为命名空间赋予以下功能:

  • 入口事件(发送到事件中心的事件)最多为每秒 1 MB,但每秒不得超过 1000 个入口事件、管理操作或控制 API 调用。
  • 出口事件(从事件中心消耗的事件)最高为每秒 2 MB,但不超过 4096 个出口事件。
  • 事件存储空间最多为 84 GB(对于默认 1 小时保持期而言已足够)。

吞吐量单位如何计费?

吞吐量单位 (TU) 按小时计费。 计费基于在给定的小时选择的最大单位数目。

如何优化吞吐量单位的使用?

可以从最低一个吞吐量单位 (TU) 开始,并启用自动扩充。 借助自动扩充功能,可以在流量/有效负载增大时增加 TU。 还可以针对 TU 数量设置上限。

事件中心自动扩充功能的工作原理是什么?

借助自动扩充功能,可以纵向扩展吞吐量单位 (TU)。 这意味着可以先购买较低的 TU,然后随着流入量的增加,自动扩充会纵向扩展 TU。 自动扩充是一种经济高效的选项,可让你完全控制 TU 数量。 这是一个仅限纵向扩展的功能,可以通过更新来完全控制 TU 数量的缩减。

你可能想要从较低的吞吐量单位 (TU) 开始,例如 2 TU。 如果预测流量可能会增加到 15 TU,请对命名空间启用自动扩充功能,并将最大限制设置为 15 TU。 现在,当流量增大时可以自动扩展 TU。

启用自动扩充功能是否会产生相关费用?

此功能不会产生相关的费用。

是否可以为现有事件中心命名空间启用区域冗余?

目前不可能产生相关费用,因为旧的事件中心命名空间位于不同的群集中,并且无法将它们迁移到在创建新的事件中心命名空间时自动启用区域冗余的新群集。

如何强制实施吞吐量限制?

如果某个命名空间中所有事件中心间的总入口吞吐量或总入口事件率超过了聚合吞吐量单位限额,那么发送方会受到限制,并会收到指明已超出入口配额的错误信息。

如果某个命名空间中所有事件中心间的总出口吞吐量或总出口事件率超过了聚合吞吐量单位限额,那么接收方会受到限制,但不会生成任何限制错误。

入口和出口配额是分开强制实施的,因此,任何发送方都不会使事件耗用速度减慢,并且接收方也无法阻止事件发送到事件中心。

可预留/选择的吞吐量单位数量是否有限制?

在 Azure 门户中创建基本层或标准层命名空间时,最多可以为命名空间选择 40 个 TU。 如果超过 40 个 TU,事件中心会提供基于资源/容量的模型,例如事件中心高级群集和事件中心专用群集。 有关详细信息,请参阅事件中心高级群集 - 概述事件中心专用群集 - 概述

专用群集

什么是专用群集?

事件中心专用群集提供单租户部署来满足苛刻的客户要求。 此产品/服务会构建不受限于吞吐量单位的基于容量的群集。 这意味着,可以使用该群集,根据群集的 CPU 和内存用量情况来引入和流式传输数据。 有关详细信息,请参阅事件中心专用群集

如何创建事件中心专用群集?

有关设置事件中心专用群集的分步说明和详细信息,请参阅快速入门:使用 Azure 门户创建事件中心专用群集

可以使用群集来做什么?

对于事件中心群集,可以引入和流式传输的数据量取决于多种因素,例如生成者、使用者、引入和处理速率。

下表展示了我们在使用旧式专用群集进行测试期间获得的基准结果。

有效负载形状 接收方 入口带宽 入口消息 出口带宽 出口消息 TU 总数 每个 CU 的 TU 数
100x1KB 批 2 400 MB/秒 400k 消息数/秒 800 MB/秒 800k 消息数/秒 400 TU 100 TU
10x10KB 批 2 666 MB/秒 66.6k 消息数/秒 1.33 GB/秒 133k 消息数/秒 666 TU 166 TU
6x32KB 批 1 1.05 GB/秒 34k 消息数/秒 1.05 GB/秒 34k 消息数/秒 1,000 TU 250 TU

测试中使用了以下条件:

  • 一个专用层事件中心群集使用四个 CU。
  • 用于引入的事件中心包含 200 个分区。
  • 引入的数据由从所有分区接收数据的两个接收方应用程序接收。

异地灾难恢复如何与群集配合工作?

可以将专用层群集下的命名空间与专用层群集下的另一个命名空间进行异地配对。 不鼓励将专用层命名空间与标准产品/服务中的命名空间配对,因为吞吐量限制不兼容,会导致错误。

是否可以将标准或高级命令空间迁移到专用层群集?

目前,我们不支持将事件中心数据从标准或高级命名空间迁移到专用命名空间的自动迁移过程。

为什么区域冗余专用群集至少有八个 CU?

为了向专用产品/服务提供区域冗余,所有计算资源必须在同一区域中的三个数据中心有三个副本。 此最低要求支持区域冗余(这样,服务才能在两个区域或数据中心关闭的情况下仍然正常运行),会形成等效于八个 CU 的计算容量。

无法更改此配额。 它是对具有专用层的当前体系结构的限制。

分区

需要多少分区?

由于分区是一种数据组织机制,支持以并行方式发布和使用数据。 我们建议均衡缩放单位(标准层的吞吐量单位、高级层的处理单位或专用层的容量单位)和分区,以实现最佳缩放。 通常情况下,建议将每个分区的最大吞吐量设置为 1 MB/秒。 因此,计算分区数的一项经验规则是将最大预期吞吐量除以 1 MB/秒。 例如,如果用例需要 20 MB/秒,则建议至少选择 20 个分区来实现最佳吞吐量。

但如果已有一个模型,其中的应用程序与特定分区存在相关性,则增加分区数量可能无用。 有关详细信息,请参阅可用性和一致性

是否可以在事件中心的标准层中增加分区计数?

不可以,因为分区在标准层中是不可变的。 只能在事件中心的高级层和专用层中动态增加分区。

定价

我可以在哪里找到更多定价信息?

有关事件中心定价的完整信息,请参阅事件中心定价详细信息

保留事件中心事件超过 24 小时的话,要收取费用吗?

事件中心标准层允许消息保留期长于 24 小时,最长以 7 天为限。 如果所存储事件总量的大小超过所选吞吐量单位数量的存储限制(每个吞吐量单位 84 GB),超出限制的部分会按公布的 Azure Blob 存储区费率收费。 每个吞吐量单位的存储限制包括 24 小时保持期的所有存储成本,即使吞吐量单元已经用到了最大入口限制。

怎样对事件中心存储区大小进行计算和收费?

所有存储的事件的总大小(包括所有事件中心内事件标头或磁盘存储器结构上的所有内部开销)按整天计量。 在一天结束时,计算存储区大小峰值。 每天的存储限制根据在当天所选择的吞吐量单元的最小数量(每个吞吐量单元提供 84 GB 的限制)来计算。 如果总大小超过计算出的每日存储限额,超出的存储量会采用 Azure Blob 存储费率(按本地冗余存储费率)来计费。

如何计算入口事件?

发送到事件中心的每个事件均计为一条可计费消息。 入口事件 定义为小于等于 64 KB 的数据单位。 任何小于等于 64 KB 的事件均被视为一个计费事件。 如果该事件大于 64 KB,则根据事件大小按 64 KB 的倍数来计算计费事件的数量。 例如,发送到事件中心的 8-KB 事件按一个事件计费,而发送到事件中心的 96-KB 的消息则按两个事件计费。

从事件中心耗用的事件以及管理操作和控制调用(例如检查点)不计为计费入口事件,但会累计,其上限为吞吐量单位限额。

中转连接费用是否适用于事件中心?

连接费用只在使用 AMQP 协议时适用。 使用 HTTP 发送事件没有连接费用,无论发送系统或设备的数量是多少。 如果计划使用 AMQP(例如,为了实现更高效的事件流式传输,或者为了对 IoT 命令和控制方案启用双向通信),请参阅事件中心定价信息页,了解有关每个服务层级中包括多少连接的详细信息。

事件中心捕获如何计费?

命名空间中的任何事件中心启用了捕获选项时,即可启用捕获功能。 事件中心捕获按所购买的吞吐量单位按月计费。 当吞吐量单位计数增加或减少时,事件中心捕获计费将在整个小时增量中反映这些变化。 有关事件中心捕获计费的详细信息,请参阅事件中心定价信息

为事件中心捕获选择的存储帐户是否要付费?

捕获使用在事件中心启用捕获时提供的存储帐户。 因为这是你的存储帐户,任何针对此配置的费用更改都将计入你的 Azure 订阅。

配额

是否有与事件中心关联的配额?

如需所有事件中心配额的列表,请参阅配额

疑难解答

为什么在从其他订阅中删除命名空间后无法创建该命名空间?

从订阅中删除命名空间时,请等待 4 个小时,然后才能在另一个订阅中使用相同的名称重新创建它。 否则,可能会收到以下错误消息:Namespace already exists

事件中心生成的异常有哪些,建议采取什么操作?

有关可能的事件中心异常的列表,请参阅异常概述

诊断日志

事件中心支持两种类型的诊断日志 - 捕获错误日志和操作日志 - 这两种日志都用 json 表示并可以通过 Azure 门户启用。

支持和 SLA

事件中心的技术支持可通过 Azure 服务总线的 Microsoft 问答页面获取。 计费和订阅管理支持免费提供。

若要详细了解我们的 SLA,请参阅服务级别协议页面。

Azure Stack Hub

当使用 Azure Blob 存储作为检查点存储时,我如何以特定版本的 Microsoft Azure Storage SDK 为目标?

如果在 Azure Stack Hub 上运行此代码,除非将特定的存储 API 版本作为目标,否则会遇到运行时错误。 这是因为事件中心 SDK 使用 Azure 中提供的最新可用 Azure 存储 API,而此 API 可能在 Azure Stack Hub 平台上不可用。 Azure Stack Hub 支持的存储 Blob SDK 版本可能与 Azure 上通常提供的版本不同。 如果你是将 Azure Blob 存储用作检查点存储,请检查支持用于 Azure Stack Hub 内部版本的 Azure 存储 API 版本,并在代码中将该版本作为目标。

例如,如果在 Azure Stack Hub 版本 2005 上运行,则存储服务的最高可用版本为版本 2019-02-02。 默认情况下,事件中心 SDK 客户端库使用 Azure 上的最高可用版本(在 SDK 发布时为 2019-07-07)。 在这种情况下,除了执行本部分中的步骤以外,还需要添加相关代码,将存储服务 API 版本 2019-02-02 作为目标。 如需通过示例来了解如何以特定的存储 API 版本为目标,请参阅以下 C#、Java、Python 和 JavaScript/TypeScript 示例。

如需通过示例来了解如何从代码中以特定存储 API 版本为目标,请参阅 GitHub 上的以下示例:

后续步骤

访问以下链接可以了解有关事件中心的详细信息: