我们正在使用EventHubSender.Send和EventHubSender.SendBatch API方法在Azure Event Hub上发送数据包。每个数据包的大小通常为6KB,并且每隔13个不同的客户端机器有13个这样的数据包(每台机器每秒发送一个数据包)。我们在单个命名空间中有两个事件中心,每个中心都有[6 KB * 13]数据包作为入口和出口。由于总入口和出口远低于一个吞吐量单元的容量,因此没有观察到节流。
但是,每秒发送的数据包的发送延迟不会保持一致。有时发送延迟高达3到4秒。此行为已针对内部部署客户端计算机以及Azure数据中心中的客户端计算机进行了测试(仅用于测试目的)。
客户端初始化代码段:
var factory = MessagingFactory.CreateFromConnectionString(EventHubConnectionString);
EventHubClient eventHubClient = this.factory.CreateEventHubClient(EventHubName);
this.eventHubSender = eventHubClient.CreatePartitionedSender(EventHubPartitionId);
发件人代码段:
using (EventData eventData = CreateEventDataPacket(data, settings))
{
this.eventHubSender.Send(eventData);
}
请注意:eventHubSender实例正在为每个后续发送请求重用,而EventHubConnectionString中使用的传输类型是AMQP。
请建议是否可以减少延迟并使Send和SendBatch方法保持一致。
答案 0 :(得分:0)
您正在创建PartitionedSender,它将事件发送到特定分区。在服务端,分区可能在执行服务升级时从一个后端移动到另一个后端,这将使分区几秒钟不可用,并可能导致发送延迟。如果您不使用partitionedSender,则事件中心客户端将以循环方式发送到每个分区,这样可以缓解分区移动时的情况。
除此之外,发送延迟还受许多因素的影响,如网络,负载平衡,服务可用性等。