繁体   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