生产方
我们正在尝试将大量数据提取到 Azure 云。数据来自传感器。速率约为每秒 13 个数据包,每个传感器的总量约为 500 KiB/s。将有 10 万个传感器。
消费者端
然后,我们有一些消费者应用程序需要检索这些数据(以尽可能低的延迟),并且生产者以相同的顺序发送数据。每个应用程序都需要一个传感器的所有数据。每个传感器将有 5-10 个应用程序/消费者。
第一种方法
首先,我们尝试使用 EventHubs 解决此问题。就数据排队并将其分发给消费者而言,这看起来最有前途。但在负载测试期间,我们发现将数据存储在一个分区上存在硬性限制(这是我们所需要的,因为数据需要随时排序)。通过一个分区和给定的负载,我们可以处理大约 4-5 个消费者。当消费者超过 5 个时,事情会变得迟缓,消费者无法再与生产者保持同步。
显然,这是 EventHub 分区本身的限制,与层(标准与高级 --> 没有区别)或扩展单位(增加扩展单位没有任何区别)无关。
Azure 对于提高吞吐量的建议很简单:增加每个 EventHub 的分区数量。但这样我们就会失去事件的顺序,并且客户将被要求自己做(这实际上是不可能实现的)。因此,在我们看来,EventHub 并不完全是我们所需要的,或者我们没有正确使用它们。
进一步思考
然后,我们搜索了大量可以为我们提供所需功能的其他服务。我们查看了ServiceBus(我们已经将其用于微服务通信)。但在那里,数据量的限制似乎更加严格。
问题
解决上述问题的理想解决方案是什么?是否可以通过一个服务来解决,或者我们是否需要组合多个服务(例如EventHub --> Stream analytivs jobs --> ServiceBus)?
最佳答案
以下是我将做的概念证明:
-使用 Azure 事件中心(具有多个分区)
-使用某些窗口函数近乎实时地设置 Azure 流分析和查询事件。然后,我会将数据接收到 Azure 服务总线主题,订阅者稍后将使用该主题。
关于azure - Azure 上管理大量数据并将其按订单交付给许多订阅者的最佳服务是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73634594/