azure - eventhub 中的大规模消息处理

标签 azure autoscaling azure-eventhub

据我了解,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/

相关文章:

typescript - 部署到 Azure 时出现 TS2304 : Cannot find name 'Office' .

amazon-web-services - 适用于Websocket应用程序的更好的AWS自动扩展和负载平衡策略

amazon-web-services - 发现新的启动配置时自动更新 Auto Scaling 组中的 EC2 实例

c# - 如何针对 Azure 事件处理器主机编写端到端测试

.net - Azure 事件中心同步机制

azure - 使用 Azure 事件中心的 Spark Streaming

postgresql - 要更改 Azure PostgreSQL 托管数据库默认时区?

c# - C#.NET 项目中我们真的需要 ApplicationInsights.config 文件吗?

visual-studio - 如何加载 Azure 上 ASP.NET Core 的配置设置?

amazon-web-services - 如何横向扩展 Amazon RDS 实例?