将多个消费者与 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。
我正在尝试使用 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。