我们需要设置4个EventHub和3个Azure函数。那么,拥有高吞吐量和可扩展参数的最佳方法是,我们可以设置一个能够处理75k消息/秒的系统吗?
发布于 2020-10-16 08:24:48
这篇文章绝对值得一读,是我的一些工作的基础,我需要达到50k p/秒。https://azure.microsoft.com/en-gb/blog/processing-100-000-events-per-second-on-azure-functions/
一个重要的考虑因素是您将拥有多少分区,因为这将直接影响您的总吞吐量。当您扩展应用程序的实例时,事件处理器主机(EPH)将尝试并获得处理特定分区的所有权,每个分区可以处理1MB/秒的入口和2MB/秒的出口。(或,1000个事件/秒)
https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-faq
您需要同时考虑消息大小和消息计数。如果可能,将尽可能多的数据点塞到事件中心消息中。在我的场景中,我正在处理每个事件中心消息中的500个数据点--从单个消息中提取大量数据比从大量消息中提取少量数据要高效得多。
对于吞吐量需求,这是您需要考虑的问题。即使在32个分区,这也不会给你75k味精p/秒--你可以要求微软增加分区数量,就像他们在我链接的最初文章中所做的那样,他们有100个分区。
至于配置设置:我正在运行
{
"version": "2.0",
"extensions": {
"eventHubs": {
"batchCheckpointFrequency": 10,
"eventProcessorOptions": {
"maxBatchSize": 256,
"prefetchCount": 512,
"enableReceiverRuntimeMetric": true
}
}
}
}这意味着大约有130万个数据点可以再次处理,这会导致函数必须从最后一个已知的检查点开始处理。这也很重要--您的更新是幂等的,还是不管它们是否被重新处理?
您需要将消息中的数据放入某种数据存储中,并且将以较高的速度插入到其中--您的目标数据存储能够处理如此高频率的插入吗?如果目标存储中断,处理管道会发生什么情况?我使用了一种类似的方法,如本文所述,该方法被总结为“在处理一批消息时出现任何故障时,将整个批处理移动到”错误“中心,并让另一个函数尝试并处理它们。你不能停止这个卷的处理,否则你会落后的!
https://blog.pragmatists.com/retrying-consumer-architecture-in-the-apache-kafka-939ac4cb851a
这也是很重要的一点。你的处理需要有多实时?如果你开始落后,你是否需要扩大规模来努力追赶?如果这事发生了你怎么知道?我创建了一个度量来跟踪任何分区的最新事件有多远,这允许我可视化并设置警报--我还根据这个数字扩展了我的函数。
asos/azure-functions-event-hub-processing-8a3f39d2cd0f
在您提到的卷-它不仅仅是一些配置将使您实现它,有许多注意事项
发布于 2020-10-28 22:45:30
maxBatchSize尽可能高。(请记住,这只是一个函数运行时的建议,有太多的变量,即使您将maxBatchSize设置为一个很大的数字,也可能得不到足够大的批)事件发布程序
事件集线器
事件集线器触发器设置:host.json和function.json
Azure函数
https://stackoverflow.com/questions/64358671
复制相似问题