Azure Functions 事件中心检查点是否适用于多个实例?

Jos*_*osh 1 azure azure-eventhub azure-functions

我有一些关于扩展 Azure Functions 和事件中心触发器的问题。我知道 AF 应用程序在某处存储了一个检查点编号(我认为是 Azure 存储),但我想知道当 AF 扩展或更改时这适用于什么(亲和力)。

  1. 如果我有一个包含消息的现有事件中心并重新部署 AF 应用程序,它会从头开始使用新的检查点重新启动,还是会从停止的地方开始?似乎它应该以某种方式从该 AF 应用程序的最后一个检查点开始。
  2. 如果我在使用事件中心触发器的 AF 应用程序中更改函数的名称,它是保持相同的检查点还是重新开始?
  3. 如果我停止/启动 AF 应用程序,它会失去位置吗?似乎不应该,因为它是存储在外部的,但我不知道它们是如何相互映射的。
  4. 当 AF 向上扩展时,多个实例是否都共享同一个检查点,还是后续实例从头开始并拥有自己的检查点?后者似乎不太可能。根据我的阅读,为每个 AF 应用程序实例创建了一个新的 EventProcessorHost,但它们是否都共享相同的检查点?
  5. 扩展时,新的 AF 应用实例是从现有/初始实例的检查点开始,还是新的 EPH 从头开始​​?

以防万一,我使用 C# DLL 和 VS2015 进行开发,使用 VSTS 进行构建/部署。

Mik*_*kov 6

每个消费者组的每个分区保存事件中心检查点。因此,如果您的集线器有 2 个分区和 3 个消费者组,它将有 6 个检查点。

您可以为您的函数触发器显式定义一个使用者组:

EventHubTrigger("myhub", ConsumerGroup = "mygroup")
Run Code Online (Sandbox Code Playgroud)

否则$Default将使用默认值。所以,对于你的问题:

  1. 如果给定消费者组存在检查点,它将从这些检查点重新启动。

  2. 函数名称并不重要,它基于消费者组。

  3. 重新启动后,应用程序将从检查点启动。

  4. 多个实例都共享相同的检查点。工作原理:每个分区将被其中一个实例锁定,因此来自该分区的事件在任何给定时间只能由单个实例处理。同一个实例会将相应的检查点更新为新的偏移量。

  5. 一旦新实例设法锁定相应的分区,它就会从现有的检查点开始。

请注意,分区数量限制了可以并行处理事件的实例数量(对于一个消费者组)。