簡體   English   中英

Cosmos 在單個主機內更改提要處理器和並發性

[英]Cosmos change feed processor and concurrency within a single host

在瀏覽完 Cosmos db 文檔后,我對更改提要處理器庫有點困惑。

  1. 每個物理分區或邏輯分區都存在租賃文件嗎?
  2. 如果我只有一個具有多個邏輯分區和一個物理分區的主機。 更改饋送處理器是否會為每個邏輯分區使用多個線程。 我有像這樣實現的 cosmos 更改提要處理器庫。
        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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM