Cosmos DB Change Feed Processor 将流量分配到同一部署单元中的多个实例似乎不起作用

Cosmos DB Change Feed Processor distribution of traffic to multiple instances in the same deployment unit doesn't seem to work

我正在为 Cosmos DB 使用 .NET SDK V3 (3.26.0)。

根据 documentation,Cosmos DB Feed Change Processor 应该将流量并行分配给同一部署单元(相同的处理器名称和租赁容器)中的多个实例。

我一直在尝试这样做,运行 三个(和更多)实例,但是 只有一个实例收到呼叫,其他实例保持空闲。

当接收实例停止时,我希望另一个实例几乎立即接收,而不是 在另一个实例开始接收消息之前经过几秒 (30-60)

问题:

  1. 我们如何确保提要更改处理器将调用分配给同一部署单元中的多个活动实例?
  2. 当一个实例停止时,我们如何确保提要更改处理器快速切换到其他活动实例?
  3. 如果实例在未调用 StopAsync 的情况下崩溃会怎样?

documentation 说:

the change feed processor will, using an equal distribution algorithm, distribute all the leases in the lease container across all running instances of that deployment unit and parallelize compute

您的租约集中有多少租约?租约是包含“所有者”属性 并以 id 开头且与您的 processorName.

匹配的文件

运行 个实例检测到另一个实例崩溃或突然停止所花费的时间由 acquireInterval (https://docs.microsoft.com/dotnet/api/microsoft.azure.cosmos.changefeedprocessorbuilder.withleaseconfiguration?view=azure-dotnet#microsoft-azure-cosmos-changefeedprocessorbuilder-withleaseconfiguration(system-nullable((system-timespan))-system-nullable((system-timespan))-system-nullable((system-timespan)))) 控制,默认为 17 秒(多长时间任何实例都需要扫描已被删除的潜在租约)和 expirationInterval 默认为 60 秒(租约需要多长时间被认为 expired/with 没有所有者)。

  1. 如前所述,分配是租约。如果您有 1 个租约,因为监视器集合只有一个分区,那么这是您当前的最大值。随着合集grows,更多租约会动态出现。
  2. 正如您所描述的,这已经发生了,所花费的时间由前面提到的配置决定。
  3. 该实例拥有的租约最终将被视为过期,另一个实例将抢走它们。