Azure 流分析太慢——时间值也不相关

Azure Stream Analytics is too slow - also time values are irrelavant

我们希望将我们的专用服务器迁移到 Azure 平台以便轻松扩展,并调查了很多 Azure 服务以满足我们的需求。因此,我们要使用的 Azure 服务之一是 Azure 流分析 (ASA)。

我们根据执行某些测试的需要添加了一些 Azure 平台(目前它们的用途并不重要)。这是结构:

SimpleApp(发送请求,不在 Azure 中)-> 事件中心 1 (EH1) -> ASA -> 事件中心 2 (EH2) -> 函数应用程序 (FA)

当我们从 TESTSERVER 日志中看到结果时,我们感到震惊。耗时4000-5000ms!

然后我们开始调查这个问题。检查 EventEnqueuedUtcTimeEventProcessedUtcTime 等值以确定是哪个块导致了这种缓慢。但是这些时间值是完全无关紧要的。例如; EventEnqueuedUtcTime 应该小于 EventProcessedUtcTime 但不是!所以这向我们展示了即使在不同的 Azure 块中时间服务器也可能不同,我们无法使用它们来测量。我错了吗?

无论如何,在此之后我们怀疑可能是最后一个 Azure Function App 导致了这种缓慢。我们认为可能是 Function App 的 Event Hub Trigger 不太好用。所以我们设计了一个新的测试环境:

SimpleApp(发送请求,不在 Azure 中)-> 事件中心 1 (EH1) -> 函数应用程序 (FA1) -> 事件中心 2 (EH2) -> 函数应用程序 2 (FA2)

第二次冲击...总共只用了~400ms!

然后,我们对包含 ASA 的不同架构进行了大量测试,但所有测试对我们来说都太慢了。

您是否遇到过 ASA 的任何性能问题?能否请您分享您的经验和流程的总耗时?

此致。

从事件中心按时间顺序合并所有事件时存在延迟。

ASA 将访问 EH 中的所有分区,获取数据并将事件按时间顺序组织。这意味着数据必须到达 EH 中的所有分区。我认为这也可以解释您在 EventProcessedUtcTime 中看到的奇怪行为,可能是因为事件是有序的,逻辑 处理时间早于实际到达时间。虽然我对此不确定,因为我不知道 ASA 的内部工作原理。

这种延迟会随着使用的分区数量的增加而增加,尤其是当数据流很慢时。

您可以通过在 EH 的 partitionid 字段上进行分区来避免合并。 确保您也将数据发送到 EH 中的正确分区。

可以在 Stream Analytics blog 上找到更多信息。