当前位置: 首页 > 知识库问答 >
问题:

Azure Functions事件中心触发器绑定

邰伟彦
2023-03-14

关于在物联网场景中使用EventHub的Azure功能,我有几个问题。

  • EventHub有分区。通常来自特定设备的消息会发送到同一个分区。Azure Function的实例如何分布在EventHub分区中?它是基于性能的吗?如果Azure Function的一个实例设法处理来自所有分区的事件,那么这就足够了,否则每个EventHub分区可能会有一个Azure Function的实例?
  • 读取偏移量呢?这个绑定是否以某种方式记录了它停止读取事件流的位置?我以为函数是无状态的,这里我们有一些状态。

谢谢

共有2个答案

韦熙云
2023-03-14

功能类app基于WebJobs SDK,使用< code>EventHostProcessor从事件中枢消费事件。因此,您可以查找有关< code>EventHostProcessor的信息,它将适用于您的功能应用程序

特别是,您可以在此处找到IEventProcessor的实现。

对于您的问题:

>

  • 不确定“一个实例”是什么意思。每个分区将创建一个侦听器,但如果负载较低,它们可以同时托管在单个应用计划实例中。从高层次上讲,您不应该太在意:在消耗计划中,无论运行多少服务器/进程/线程,您都需要按执行时间付费。当然,您应该关心自动缩放对于高负载是否足够好,但无论如何都需要对其进行测试。

    在某种意义上,函数是无状态的,在两次函数执行之间,你不能在内存中保存任何东西。你完全可以将状态保存在外部存储器中。函数App将使用< code>PartitionContext。CheckpointAsync()用于当前偏移量的检查点设置。Azure存储内部使用;同样,您可以在事件中心和< code>EventHostProcessor文档中了解更多有关其工作原理的信息,例如,在此处。

  • 欧阳高昂
    2023-03-14

    事件中心触发函数的每个实例仅由一个EventProcessorHost(EPH)实例支持。事件中心确保只有一个EPH可以获得给定分区的租约。

    对问题1的回答:让我们用一个虚构的例子来详细说明这一点。假设我们从EventHub的以下设置和假设开始:

    1. 10 个分区。
    2. 1000 个事件均匀分布在所有分区中 =

    首次启用函数时,只有 1 个函数实例。让我们将此函数实例称为Function_0。Function_0将有 1 个 EPH,设法在所有 10 个分区上获得租约。EPH_0调用此 EPH,它将开始从分区 0-9 读取事件。从此时起,将发生以下情况之一:

    >

  • 只需要1个Function实例-Function_0能够在Azure Functions的缩放逻辑启动之前处理所有1000条消息。因此,所有1000条消息都由Function_0处理。

    再添加 1 个函数实例 - Azure 函数的缩放逻辑确定Function_0看起来很慢,因此会创建一个新实例Function_1,从而导致EPH_1。事件中心检测到新的 EPH 实例正在尝试读取消息。事件中心将开始对 EPH 实例之间的分区进行负载均衡,例如,将分区 0-4 分配给EPH_0,将分区 5-9 分配给EPH_1。如果所有函数执行都成功且未出现错误,则EPH_0和EPH_1检查点都成功,并且将处理所有 1000 条消息。当检查指向成功时,不应再检索所有 1000 封邮件。

    html" target="_blank">添加 N 个函数实例 - Azure Functions 的缩放逻辑确定Function_0和Function_1仍然缓慢,并将再次重复工作流 2,Function_2...N,其中 N

    对问题2的回答:EPH使用检查点机制来标记最后一次已知的成功读取消息。可以设置EventHub-触发函数以一次处理1条消息或一批消息。您选择的选项需要考虑以下内容:

    1. 消息处理速度 - 批量处理消息而不是一次处理一条消息是加快 Azure 函数工作流跟上事件中心传入消息的能力的因素之一。

    2.重复项的容差-如果检查点由于以下原因而失败 <罢工> 函数代码/中的错误 (2017年8月24日更新)超时/分区丢失最少,则下一个获得该分区租约的EPH将开始从最后一个已知的检查点检索消息。事件中心保证至少一次传递,但不保证最多一次传递。Azure Functions不会尝试更改该行为。如果没有重复消息是优先事项,则您需要在工作流中减轻它。因此,当检查点失败时,如果您的Function在批处理级别处理消息,则需要管理更多重复消息。

  •  类似资料:
    • 我对Azure函数的EventHubTrigger有点困惑。 我有一个物联网集线器,我正在使用它与eventhub兼容的endpoint来触发一个Azure函数,该函数将处理和存储接收到的数据。 但是,如果我的函数失败(=抛出异常),在函数调用期间正在处理的消息(或消息)将丢失。实际上,我希望Azure函数运行时在稍后再次处理消息。具体来说,我预计会有这种行为,因为EventHubTrigger正

    • 我正在尝试创建一个从Azure事件中心触发的Java Azure函数。下面是这些代码片段:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-hubs-trigger?tabs=java#example 这是我的代码: 这是我在构建时遇到的错误: 我已经找了几个小时,一页又一页的谷歌搜索都筋

    • 使用mui.trigger()方法可以动态触发特定DOM元素上的事件。 .trigger( element , event , data ) element Type: Element 触发事件的DOM元素 event Type: String 事件名字,例如:'tap'、'swipeleft' data Type: Object 需要传递给事件的业务参数 示例 自动触发按钮的点击事件: var

    • 问题内容: 我的整个项目都使用(Bluebird)Promises,但是有一个使用EventEmitter的特定库。 我想要实现以下目标: 我在Promises链中读了EventEmitter的答案。这给了我一种执行’connect’事件的回调的方法。这是我到目前为止所到之处 现在如何进一步链接“ eventB”? 问题答案: 我假设您想为每个事件做不同的事情。即使由的动作触发,您也可以将其视为另

    • 问题内容: 当有人 使用鼠标在页面上 选择给定的文本片段时, 如何 触发JavaScript函数 ? 另外,有什么方法可以 找到所选文本 在页面上的 位置 吗? 更新:更清楚地说,文本片段可以是句子或单词或短语的一部分,也可以是整个段落。 问题答案: 没有“ 选择了文本 ” 事件,但是您可以将事件绑定到。在该事件处理程序中,您可能只需检查 要么 方法。关于Stackoverflow有几个主题,例如

    • 我有一个 Blob 存储容器,其中配置了事件网格触发器(Blob 已创建)。我正在通过数据工厂加载此 blob 存储文件,很多时候,许多文件可能会在一次尝试中出现在此 blob 中。也许我们可以举一个20个文件的例子。 好消息是我的事件网格触发器启动了,函数app被调用。然而,我发现有时对于同一个文件,事件网格触发器被触发了不止一次。 在这20个文件中,很少有文件非常大,比如300 MB,但其他文