Cosmos DB 更改源处理器将流量分配到同一部署单元中的多个实例似乎不起作用

问题描述 投票:0回答:2

我正在使用适用于 Cosmos DB 的 .NET SDK V3 (3.26.0)。

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

我一直在尝试这样做,运行三个(甚至更多)实例,但是只有一个实例接收调用,其他实例保持空闲状态。

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

问题:

  1. 我们如何确保 Feed 更改处理器将调用分发到同一部署单元中的多个活动实例?
  2. 如何确保实例停止时 Feed 更改处理器快速切换到其他活动实例?
  3. 如果实例崩溃而不调用 StopAsync 会发生什么?
.net azure-cosmosdb
2个回答
1
投票

那个文档说:

变更源处理器将使用平均分配算法,将租赁容器中的所有租赁分配给该部署单元的所有正在运行的实例,并并行计算

您的租赁集中有多少份租赁?租约是包含“所有者”财产并以 和 开头的文档,与您的

id
匹配。
运行实例检测到另一个实例崩溃或突然停止所需的时间由 

processorName

(

https://learn.microsoft.com/dotnet/api/microsoft.azure.cosmos.changefeedprocessorbuilder.withleaseconfiguration) 控制?view=azure-dotnet#microsoft-azure-cosmos-changefeedprocessorbuilder-withleaseconfiguration(系统可空((系统时间跨度))-系统可空((系统时间跨度))-系统可空((系统时间跨度))) 
)默认为 17 秒(任何实例扫描已删除的潜在租约需要多长时间),而 acquireInterval 默认为 60 秒(租约被视为过期/没有租约需要多长时间)业主)。

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

0
投票

我的容器有多个物理分区,但单个实例仍在接收所有更改事件。所有实例都有一个唯一的名称,并且它们都共享相同的处理器名称和相同的租赁容器。

根据 Cosmos Metrics,我有 8 个物理分区,因此我应该看到多个实例同时接收更改事件。

还有什么我错过的事情导致了这种情况的扩展吗?

这是我的更改提要处理器:

expirationInterval

物理分区数量:

© www.soinside.com 2019 - 2024. All rights reserved.