eventhub 发布速度很慢

eventhub publishing very slow

我正在使用这些代码片段在 eventhub 上发布事件:

// ...

var eventHubClient = EventHubClient.CreateFromConnectionString(ConnectionString, EventHubName);

// ...

var serializerSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.None };
var data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(evt, serializerSettings));
var eventToBeSend = new EventData(data) {PartitionKey = "Bla"};
eventHubClient.Send(eventToBeSend);

这似乎很慢(即 eventHubClient.Send 方法调用需要相当多的时间)。我可以做些什么来加快速度吗?

您可以尝试将要发送的事件分组并使用 SendBatchAsync() 。只要您的批量大小不超过一次操作的 256k 限制,就可能会显着加快消息传递速度。

此外,只需确保您还保留您的 QueueClient - 它们是通过名为 MessagingFactory 的东西创建的,它提供内部连接管理,所以一旦创建,请保持您的 QueueClient 启动。

有一个关于服务总线性能的好页面:

https://azure.microsoft.com/nb-no/documentation/articles/service-bus-performance-improvements/

向事件中心发送大量数据时最常见的瓶颈之一是一组不正确的吞吐量单位。

不太确定处理此请求需要多长时间以及您发送的每个包裹的大小,但您应该在做出任何假设之前查看此官方文档。

什么是事件中心吞吐量单位?

您通过 Azure 门户或事件中心资源管理器模板明确 select 事件中心吞吐量单位。吞吐量单位适用于事件中心命名空间中的所有事件中心,每个吞吐量单位赋予命名空间以下功能:

  • 每秒最多 1 MB 的入口事件(发送到事件中心的事件),但每秒不超过 1000 个入口事件、管理操作或控制 API 调用。
  • 每秒最多 2 MB 的传出事件(从事件中心消耗的事件)。 最多 84 GB 的事件存储空间(足以满足默认的 24 小时保留期)。
  • 事件中心吞吐量单位按小时计费,基于给定小时内 selected 的最大单位数。您可以随着使用量的增加自动增加吞吐量单位数。