将多个消费者与 CosmosDB 更改提要一起使用

Using multiple consumers with CosmosDB change feed

我正在尝试使用 cosmos db 更改提要(我指的是 https://docs.microsoft.com/en-us/azure/cosmos-db/change-feed-processor and https://github.com/Azure/azure-cosmos-dotnet-v2/tree/master/samples/code-samples/ChangeFeedProcessorV2)。

当我启动消费者的多个实例时,观察者似乎只看到 1 个分区键范围。我只看到一条消息 - Observer opened for partition Key Range 0 并且它开始接收更改提要。因此,在任何给定点,只有 1 个消费者接收到提要。如果我关闭一个消费者,下一个消费者就会高兴地接起来。

我似乎无法理解 cosmos db 中的分区键/范围。在 cosmos db 中,我在其中创建了一个数据库和一个 collection。我定义了一个分区键 - /myId。我在 myId 中存储了一个唯一的 guid。我在 collection.

中保存了大约 10000 笔交易

当我使用 api (/dbs/db-name/colls/coll-name/pkranges) 查看分区键范围时,我只看到 PartitionKeyRanges 下的节点。下面是我看到的输出

{
    "_rid": "LEAgAL7tmKM=",
    "PartitionKeyRanges": [
        {
            "_rid": "LEAgAL7tmKMCAAAAAAAAUA==",
            "id": "0",
            "_etag": "\"00007d00-0000-0000-0000-5c3645e70000\"",
            "minInclusive": "",
            "maxExclusive": "FF",
            "ridPrefix": 0,
            "_self": "dbs/LAEgAA==/colls/LEAgAL7tmKM=/pkranges/LEAgAL7tmKMCAAAAAAAAUA==/",
            "throughputFraction": 1,
            "status": "online",
            "parents": [],
            "_ts": 1547060711
        }
    ],
    "_count": 1
}

这不应该显示更多分区键范围吗?这种行为是预期的吗?

如何让多个消费者接收数据,如https://docs.microsoft.com/en-us/azure/cosmos-db/change-feed-processor所示?

TL;DR - 您应该能够忽略分区键范围和它们的数量,让 Change Feed Processor 为您管理。

分区键范围是我们目前泄露的一个实现细节。简短的回答是,当我们想要重组您的数据在后端的存储方式时,我们会添加新的分区键范围。发生这种情况的原因有很多,比如您添加了更多数据,您为该数据的一个子部分消耗了大量 RU,或者我们只是想打乱顺序。理论上,如果您不断添加数据,我们最终会将范围一分为二。

我们正在对目前处于预览状态的 v3 SDK 进行一些更新,以进一步对此进行抽象,因为即使我上面给出的答案也很粗糙,我们应该有一个更容易理解的合同public 个 API。