首页 > 解决方案 > 带有事件中心触发器的 Azure 函数接收到奇怪数量的事件

问题描述

我有一个连接到它的事件中心和 Azure 函数。使用少量数据一切都很好,但是当我用 10 000 个事件对其进行测试时,我得到了非常奇特的结果。出于测试目的,我将 0 到 9999 的数字发送到事件中心,并在应用程序洞察和服务总线中记录数据。对于我在 Azure 中看到的第一个测试,集线器正好有 10 000 个事件,但服务总线和 AI 收到了 0 到 4500 之间的所有消息,并且在 4500 之后每隔一秒收到消息(所以它丢失了大约 30%)。在第二次测试中,我收到了从 0 到 9999 的所有消息,但是在 3500 和 3200 之间的每一秒消息都是重复的。我想一次收到所有消息,我做错了什么?

public async Task Run([EventHubTrigger("%EventHubName%", Connection = "AzureEventHubConnectionString")] EventData[] events, ILogger log)
    {
        int id = _random.Next(1, 100000);
        _context.Log.TraceInfo("Started. Count: " + events.Length + ". " + id); //AI log
        foreach (var message in events)
        {
            //log with ASB
            var mess = new Message();
            mess.Body = message.EventBody.ToArray();
            await queueClient.SendAsync(mess);
        }
        _context.Log.TraceInfo("Completed. " + id); //AI log
    }

标签: azureazure-functionsazure-eventhub

解决方案


通过使用 EventData[] 事件,您以批处理模式从集线器读取事件,这就是为什么您一次看到 X 事件处理,然后在接下来的几秒钟内处理下一批。

而不是 EventData[] 只需使用EventData

当您将事件发送到集线器时,如果您想尝试批处理,请检查所有事件是否使用相同的分区键发送,否则它们可以根据 TU(吞吐量单位)、PU(处理单位)和 CU(容量单位)分成几个分区.

出口:高达每秒 2 MB 或每秒 4096 个事件。

请参阅本文档

Basic、Standard、Premium.. 的吞吐量限制:

在此处输入图像描述


推荐阅读