eventhub发布很慢

时间:2016-02-28 19:03:14

标签: c# azure azure-eventhub

我正在使用这些代码段在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方法调用需要相当长的时间)。我有什么办法可以加快速度吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

将大量数据发送到事件中心时,最常见的瓶颈之一是吞吐量单位不合适。

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

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

您可以通过Azure门户或事件中心资源管理器模板显式选择事件中心吞吐量单位。吞吐量单元适用于Event Hubs命名空间中的所有事件中心,每个吞吐量单元授予命名空间以下功能:

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