如何从Azure Event Hub获得高速处理接收?

时间:2016-08-08 10:46:53

标签: azure producer-consumer azure-eventhub

我正在为Azure事件中心的POC工作,以便在我们的应用程序中实现相同的功能。

简要介绍流程。

  • 创建工具以从本地文件夹中读取CSV数据并将其发送到事件中心。
  • 我们将批量发送事件数据到事件中心。
  • 使用12个工具实例(并行),我可以在1分钟内向Event hub发送总共600 000行消息。
  • 但是,在接收方,要接收60万行数据,需要10分钟以上。

需要实现

  • 我想在接收器上匹配/加倍我的出口速度 处理数据。现有配置

我使用户的配置

  • TU - 具有32个分区的10个单事件中心。

  • 编码逻辑与MSDN

  • 中提到的相同
  • 唯一不同的是,我正在批量发送数据 EventProcessorhost,带选项{MaxBatchSize = 1000000,
    PrefetchCount = 1000000

1 个答案:

答案 0 :(得分:2)

在eventhubs中实现更高的出口率(又名更快的处理流程):

  1. 创建一个Scaled-out管道 - EventHub中的每个分区都是unit-of-scale,用于处理EventHub之外的事件。使用您描述的比例(每分钟6Lakh事件 - >每秒10K事件 - 具有32个分区 - 您已经正确)。确保在不久的将来创建尽可能多的分区,以满足您的管道需求。想象一下,分析高速公路上的交通,没有。车道是对交通量的唯一限制。

  2. 跨分区的相等负载分配:如果您使用的是SendToASpecificPartition或SendUsingPartitionKey,则需要处理相等的负载分配。如果您使用EventHubClient.Send(EventDataWithOutPartitionKey) - EventHubs服务将确保所有分区均等加载。如果单个EventHub分区负载很重 - 您可以在EventHub上处理所有事件的时间量将被no绑定。此分区上的事件。

  3. 横向扩展Receiver / EventProcessorHost上的物理资源:最重要的是网络(套接字和带宽)&一点一点,CPU&记忆。使用PartitionManagerOptions.MaxReceiveClients增加每EventHubClient个实例创建的MessagingFactory(具有专用socket(映射到1 EventProcessorHost)的最大数量。默认情况下为16

  4. 让我知道它是怎么回事...... :)

    More on Event Hubs.