[英]Cosmos change feed processor and concurrency within a single host
在瀏覽完 Cosmos db 文檔后,我對更改提要處理器庫有點困惑。
var changeFeedProcessorInstance = new ChangeFeedProcessorBuilder()
.options(cfOptions)
.hostName(hostName)
.feedContainer(container)
.leaseContainer(leaseContainer)
.handleChanges((List<JsonNode> docs) -> {
for (JsonNode document : docs) {
// Doing some processing
}
})
.buildChangeFeedProcessor();
changeFeedProcessorInstance.start()
.subscribeOn(Schedulers.elastic())
.doOnSuccess(aVoid -> {
})
.subscribe();
我的假設是由於 Scheduler.elastic 可以在每個邏輯分區的基礎上使用一個新線程。
當前的實現對每個物理分區使用 1 個租賃文檔。
並行化基於租約。 如果租用存儲有 10 個租約,則最多可以分配 10 個主機,因為在任何給定時間點,1 個租約只能由單個主機擁有(您可以使用更少的主機,並且租約將平均分配)。
如果您的租約存儲包含 1 個租約(因為該集合有 1 個物理分區),那么您最多可以監聽 1 個主機中的更改。 添加更多主機只會讓多余的主機閑置。 例如,如果由於使用了更多存儲而導致集合增長,並且動態添加了新的物理分區,則將動態添加新的租約,並且額外的實例可以開始自動獲取它們(如果可用的實例多於租約)。 當兩個維度發生變化時,該庫會自動在主機上動態分配租約。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.