Azure functions Azure EventHub&;函数最小异常

Azure functions Azure EventHub&;函数最小异常,azure-functions,azure-eventhub,Azure Functions,Azure Eventhub,我们在我们的消费计划功能应用程序上看到异常奇怪的行为,请注意我们反复看到的以下异常: Microsoft.Azure.EventHubs.receiveDisconnectedException(创建了具有更高纪元“2”的新接收器,因此当前具有纪元“1”的接收器正在断开连接。) System.Net.WebException(引发了类型为“Microsoft.ServiceBus.Messaging.LeaseLosteException”的异常。) 每当我们强调功能时,我们都会遇到这些例外

我们在我们的消费计划功能应用程序上看到异常奇怪的行为,请注意我们反复看到的以下异常:

  • Microsoft.Azure.EventHubs.receiveDisconnectedException
    (创建了具有更高纪元“2”的新接收器,因此当前具有纪元“1”的接收器正在断开连接。)
  • System.Net.WebException
    (引发了类型为“Microsoft.ServiceBus.Messaging.LeaseLosteException”的异常。)
每当我们强调功能时,我们都会遇到这些例外情况,即在短时间内从0到50000个事件,但它们与我们的功能应用程序匹配的cloud_角色相关联。。这会让我相信这是一个主机错误

阅读各种文档,例如(),我想我理解EventHub接收器是如何工作的[但老实说,我是在字里行间阅读,因为它很不清楚],因为我的一个接收器依赖于一个消费者组来管理从EventHub分区(我正在使用32个分区)读取的批量消息

我的假设是,在负载下,有太多的功能实例供单个消费者群体“处理”,它只是重复地切换分区租约。。。然而,在我的测试场景中,除了在事件集线器之间中继消息之外,我从函数中删除了所有逻辑,即使事件集线器上只有4个分区,错误仍然存在

为了看看是否在以后的版本中得到了解决,我在Functions v2中模拟了完全相同的功能,并得到了我认为与.net核心等效的功能

  • Microsoft.Azure.EventHubs.receiveDisconnectedException
    (创建了具有更高纪元“2”的新接收器,因此当前具有纪元“1”的接收器正在断开连接。)
  • Microsoft.WindowsAzure.Storage.StorageException
    (指定的租约ID与blob的租约ID不匹配。)
  • System.ArgumentOutOfRangeException
    (忽略偏移量为1184072/序列号为1038的过期检查点,因为..)
  • 那么,能找个人吗

    • 解释一下到底是怎么回事
    • 请帮助我抑制这些错误,如果它们不是真正的“真实”错误,并且它们只是管理事物的主机

    这些异常非常烦人,因为它使得实际看到真正未处理的异常非常困难。

    这些是由于函数应用程序(主机进程)中的函数动态扩展/插入而产生的虚假错误,您可以忽略它们

    可以理解的是,它们出现在您的日志中这一事实令人震惊,我们已经开始了一些工作来抑制一些错误(请参阅)。这是随版本发布的,您应该将其视为警告。如果它们仍然显示为错误,请谅解


    关于您为什么会看到这些异常的其他背景信息

    让我们从一些关于EventHub伸缩工作原理的初步介绍开始,如本文所述:

    1。Microsoft.ServiceBus.Messaging.LeaseLosteException

    每次扩展操作成功时,EventHub都会在成功获得分区租约的
    EventProcessorHosts
    (1..N)中重新分配分区租约,其中N是EventHub的分区数。例如,如果您仅从函数_0开始,并且它设法在所有10个分区上至少获取一个,那么当我们扩展到函数_1并且EventHub决定在两个函数之间均匀分布消息时,函数_0将丢失对其中5个分区的租约。此行为解释了引发您看到的类型为“Microsoft.ServiceBus.Messaging.leaselstexception”的
    异常

    2。Microsoft.Azure.EventHubs.ReceiverDisconnectedException


    此外,Azure函数还扩展到>N实例,因此将有一组N+1…M,其中M是无法在任何分区上获得租约的扩展实例总数。这样做的副作用是,始终会有一个EPH随时准备快速获取丢失的租约,以保持管道继续运行。这就解释了
    创建了具有更高历元“2”的新接收器,因此当前具有历元“1”的接收器断开连接。
    如您所见。同样,您只在执行功能时才需要付费,因此这里存在一些过度设置的事实不会影响您的计费。

    与往常一样,这是一个极好的回答,非常感谢。。我在前面阅读了你在这个答案中链接到的帖子,我只想确认这两个例外本身(在正常操作公差下)会导致事件的重复读取。问题:谢谢你提交这个问题。要回答您关于重复消息的问题,是的,LeaseLosteException可能会导致EventProcessorHost错过检查点,这反过来会导致再次检索整个批并将其传递到另一个函数实例。