[英]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.