azure - 更改 Feed 处理器 : multi-region deployment units

标签 azure azure-cosmosdb azure-cosmosdb-sqlapi azure-cosmosdb-changefeed

我有在多个区域运行的微服务(Kubernetes Pod)。我有一个受监控的集合。 (所有区域将监控同一个集合;每个区域有多个 Pod)

我希望每个区域的部署单元独立处理每个文档(已更新)。以下是我计划如何完成这项工作:

  • 每个区域的部署单元将使用不同的处理器名称(例如 CFP-US、CFP-Europe、CFP-Australia)
  • 在一个区域中运行的所有 Pod 都将使用该区域的处理器名称、相同的租赁容器和不同的实例名称(例如 Pod 的唯一 ID)。 (实际上,所有区域的租赁容器都是相同的)。

问题:

  • 上述设置是否达到了我想要的效果(即每个区域独立处理更新的每个文档?)
  • 我的收藏只有一个物理分区。我的理解是,在这种情况下,一个区域中的所有 pod/实例都只存在一个租约(因为租约是针对物理分区的);每个区域都有自己的租约(因为每个区域的处理器名称都不同)。我的理解正确吗?
  • 假设我在一个区域中有 3 个 Pod/实例。由于仅存在租约,因此一次只有 pod 接收 CFP 更新,而其他 2 个 pod 则处于空闲状态。如何配置租约/间隔,以便所有 3 个 Pod(几乎)平等地获得更新?即 pod-A 获取更新(并且 pod-B、pod-C 闲置),然后一段时间后,pod-B 获取更新(并且 pod-A、pod-C 闲置);然后 pod-C 获取更新(而 pod-B、pod-A 闲置);等等。
  • 医生说:

the number of instances should not be greater than the number of leases.

除了某些 Pod 可能处于闲置状态之外,实例数量多于租用数量是否会导致任何其他问题? (特别是租赁状态下的问题,或获取/续签租赁等方面的问题)

最佳答案

  1. 是的。只要它们是不同的部署单元 ( https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/change-feed-processor?tabs=dotnet#deployment-unit ),无论它们的物理位置如何,每个部署单元都会收到更改。
  2. 正确。每个部署单元都会创建自己独立的一组租约。
  3. 你不能。每台机器的租约分配是设计使然,没有配置强制它。
  4. 这是理想的场景,原因是所有机器(使用 LeaseAcquireInterval)都会频繁检查它们是否可以获得新的租约。如果当前拥有它的机器释放它(例如,由于未处理的错误),则租约可以跳转到任何其他机器。根据您的遥测数据,这可能是不可取的。

关于azure - 更改 Feed 处理器 : multi-region deployment units,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74218233/

相关文章:

entity-framework-core - 如果某个项目无法读取,是否可以从 Cosmos 中删除该项目?

azure - SDG 是否适用于子网的服务端点

azure-cosmosdb - 从 CosmosDB 中的不同分区查询文档的建议方法是什么?

mongodb - Mongo shell 无法连接到 Azure CosmosDB

c# - Cosmos DB 响应 404

api - CosmosDB 中的 NULL 连续 token

sql-server - 是否可以通过 Azure 云托管上的 SQL Server Management Studio 创建 .bak 文件?

rest - Azure REST API 不返回虚拟机的加密设置

java - 使用 JAVA 在 Microsoft Azure 中创建 VM

azure - 如何在 Azure 监视器中添加 VM 洞察指标警报?