如何测试 Databricks 结构化流中的端到端延迟?

问题描述 投票:0回答:1

我是结构化流媒体新手,并尝试在结构化流媒体中读取数据进行性能测试 我想测试不同的场景,例如,不同的集群大小、每秒不同的消息数量、处理增量表之间的数据以及写回不同的目标。

我的问题是我找不到如何比较端到端延迟或所花费的时间。与批处理不同,我无法引用笔记本命令中的时间命令,因为它不断运行。 有人知道从哪里开始吗?有什么功能可以在 Databricks UI 中找到此信息吗?谷歌搜索并没有真正帮助我。

我尝试查看笔记本、作业,但很难准确理解进程之间的延迟。

databricks spark-structured-streaming real-time-data
1个回答
0
投票

Databricks 中没有内置方法来获取结构化流查询的端到端延迟。但我仍然会讨论一种可以用于一般结构化流的方法。

首先,您可以使用费率源为您的记录生成固定工作负载。每个速率源记录都有一个时间戳,您可以将其用作源时间戳。速率源的模式有一个

timestamp
字段,您可以通过
source-timestamp
调用将其重命名为
withColumn
(或类似的名称)。

接下来,如果您要写入像 Kafka 这样的接收器,您应该能够指示您的代理包含

timestamp
列作为传入记录的日志附加时间,如此处指定的那样。大多数其他消息队列应该具有此功能,但您必须检查这些文档。此类功能应确保您的接收器表同时具有源和接收器时间戳。

从那里,您可以编写批量查询来计算另一个表,其中包含接收器时间戳和源时间戳之间的差异。然后,您可以使用百分位数函数来计算该列的延迟百分位数。

如果您使用的是文件接收器之类的东西,您可能需要做一些额外的工作才能将接收器时间戳记入记录中。您可能需要编写一些自定义 Spark 代码来遍历每个创建的接收器文件,提取其时间戳,并将其与关联文件中的记录关联起来。

最后,您应该注意,计算 e2e 延迟在一定程度上取决于您使用的运算符:

  • 如果您使用窗口聚合,则延迟应计算为接收器时间戳与聚合时间窗口结束时间之间的差值。
  • 如果您使用流-流连接,则延迟应计算为接收器时间戳与左/右流的源时间戳之间的最大之差。

(免责声明:我是从事结构化流处理的 Databricks 员工。)

© www.soinside.com 2019 - 2024. All rights reserved.