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

Do Azure Functions Event Hub checkpoints apply to multiple instances?

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

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

以防万一,我在开发中使用 C# DLL 和 VS2015,在 building/deploying 中使用 VSTS。

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

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

EventHubTrigger("myhub", ConsumerGroup = "mygroup")

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

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

  2. 功能名称不重要,它基于消费者群体。

  3. 重启后,应用将从检查点开始。

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

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

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