据我了解,eventhub 每秒可以处理/摄取数百万条消息。为了调整摄取,我们可以使用吞吐量。
更高的吞吐量=更强的摄取能力。
但是在接收/消费方面,您最多可以创建 32 个接收者(因为我们可以创建 32 个分区,并且一个分区可以由一个接收者消费)。
基于上述,如果处理一条消息需要 100 毫秒,那么一个消费者每秒可以处理 10 条消息,32 个消费者每秒可以处理 32*10= 320 条消息。
如何让我的接收器消耗更多消息(例如每秒 5-10k)。
1) 要么我必须在 ProcessEventsAsync 内异步处理消息。但在这种情况下,我将无法维持排序。
2) 或者我必须请求 Microsoft 允许我创建更多分区。
请指教
最佳答案
TLDR:您需要请求 Microsoft 增加允许的分区数量,并记住,目前无法增加现有事件中心的数量。
您的消耗并行单位是分区是正确的。如果您的消费者只能按顺序执行 10/秒甚至 100/秒,那么您将需要更多分区来消费数百万个事件。虽然 100 毫秒/事件对我来说确实很慢,而且我认为您应该在那里寻求优化(即分担不需要等待的工作、减少提交次数等),但您将达到需要大规模更多分区的程度。
需要记住的一些事情:32 个分区只能提供 32 Mb/s 的入口速度和 64 Mb/s 的导出速度。这两个因素都很重要,因为导出吞吐量由您使用的所有消费者组共享。因此,如果您有 4 个消费者组读取数据(每个 16Mb/s),您将需要两倍的分区(或至少吞吐量单位)作为输入,因为您将仅基于数据入口(因为否则您会落后) .
关于您对 Multi-Tenancy 的评论,您将有一个“数据库消费者”组来处理所有租户,所有租户的数据都将流经同一中心?如果这听起来是一种明智的使用,那么就不那么明智的是让每个租户有一个消费者组,每个消费者组消耗整个流。
关于azure - eventhub 中的大规模消息处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27645204/