【问题标题】:High scale message processing in eventhubeventhub 中的大规模消息处理
【发布时间】:2015-02-23 01:29:08
【问题描述】:

据我了解,eventhub 每秒可以处理/摄取数百万条消息。为了调整摄取,我们可以使用吞吐量。

更高的吞吐量 = 更多的摄取能力。

但在接收/消费端,您最多可以创建 32 个接收器(因为我们可以创建 32 个分区,一个分区可以被一个接收器消费)。

基于上述,如果一条消息需要 100 毫秒来处理,那么一个消费者每秒可以处理 10 条消息,而 32 个消费者每秒可以处理 32*10= 320 条消息。

我怎样才能让我的接收器消耗更多的消息(例如,每秒 5-10k)。

1) 我必须在 ProcessEventsAsync 中异步处理消息。但在这种情况下,我将无法维持订单。

2) 或者我必须请求 Microsoft 允许我创建更多分区。

请指教

【问题讨论】:

  • 嗨@Pragmatic,有 32 个分区和 10 个 TU,我可以在 10 分钟内收到 6 个缺少消息。观察到,使用 20 TU 它减少到 5 分钟。但是增加TU可能最终会支付更多的钱。如果您已经解决了这个问题,请分享您的 cmets。因为我希望在 1 分钟或更短的时间内处理完所有 6 条缺失消息。

标签: azure autoscaling azure-eventhub


【解决方案1】:

TLDR:您需要要求 Microsoft 增加您允许的分区数量,并记住目前无法增加已经存在的事件中心的数量。

您的消费并行度是分区是正确的。如果您的消费者只能按顺序执行 10 个/秒甚至 100 个/秒的顺序,那么您将需要更多的分区来消费数百万个事件。虽然 100 毫秒/事件在我看来确实很慢,并且我认为您应该在那里寻找优化(即,将您不需要等待的工作分出,减少提交频率等),您将达到需要大规模分区的地步。

需要记住的一些事项:32 个分区仅提供 32 Mb/s 的入口和 64Mb/s 的出口。这两个因素都很重要,因为出口吞吐量由您使用的所有消费者组共享。因此,如果您有 4 个消费者组读取数据(每个 16Mb/s),您将需要两倍于仅基于数据入口的分区(或至少吞吐量单位)用于输入(因为否则您会落后) .

关于您对多租户的评论,您将拥有一个“数据库使用者”组来处理您的所有租户,所有租户的所有数据都将流经同一个集线器?如果这听起来像是一个明智的用途,那么每个租户都有一个消费者组每个消费整个流就不那么明智了。

【讨论】:

  • 如果您已经拥有事件中心并且需要提高消耗速度 - 要考虑的另一种解决方案是管道事件中心(将数据从 EventHub 的繁忙分区馈送到另一个 eventHub)然后使用从新的 32 个分区(从单个分区拆分而来)。
  • 虽然@Sreeram 的评论可能是您对现有活动中心唯一真正的方法,但这样做的缺点是您最终为每个活动支付两次费用(0.028 美元/百万)。好处是每个分区还有另外一组 5 个(为了安全起见 4 个)消费者,这是我在回答中没有提到的限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 2017-02-09
相关资源
最近更新 更多