我是结构化流媒体新手,并尝试在结构化流媒体中读取数据进行性能测试 我想测试不同的场景,例如,不同的集群大小、每秒不同的消息数量、处理增量表之间的数据以及写回不同的目标。
我的问题是我找不到如何比较端到端延迟或所花费的时间。与批处理不同,我无法引用笔记本命令中的时间命令,因为它不断运行。 有人知道从哪里开始吗?有什么功能可以在 Databricks UI 中找到此信息吗?谷歌搜索并没有真正帮助我。
我尝试查看笔记本、作业,但很难准确理解进程之间的延迟。
Databricks 中没有内置方法来获取结构化流查询的端到端延迟。但我仍然会讨论一种可以用于一般结构化流的方法。
首先,您可以使用费率源为您的记录生成固定工作负载。每个速率源记录都有一个时间戳,您可以将其用作源时间戳。速率源的模式有一个
timestamp
字段,您可以通过 source-timestamp
调用将其重命名为 withColumn
(或类似的名称)。
接下来,如果您要写入像 Kafka 这样的接收器,您应该能够指示您的代理包含
timestamp
列作为传入记录的日志附加时间,如此处指定的那样。大多数其他消息队列应该具有此功能,但您必须检查这些文档。此类功能应确保您的接收器表同时具有源和接收器时间戳。
从那里,您可以编写批量查询来计算另一个表,其中包含接收器时间戳和源时间戳之间的差异。然后,您可以使用百分位数函数来计算该列的延迟百分位数。
如果您使用的是文件接收器之类的东西,您可能需要做一些额外的工作才能将接收器时间戳记入记录中。您可能需要编写一些自定义 Spark 代码来遍历每个创建的接收器文件,提取其时间戳,并将其与关联文件中的记录关联起来。
最后,您应该注意,计算 e2e 延迟在一定程度上取决于您使用的运算符:
(免责声明:我是从事结构化流处理的 Databricks 员工。)