Håk*_*sen 1 google-cloud-dataflow
在我们只对高流量Google Dataflow群集进行简单转换并且每个"数据点"都很小的情况下,我们可以预期Dataflow的延迟有多低.
我们计划使用Sessions窗口策略,间隔持续时间为3秒,如果相关的话.
从数据点到数据流的时间到输出结果可能少于2秒是否现实?不到1秒?
小智 5
我们一直在使用测试工具为我们的应用程序流程运行基准测试,但后来又恢复了对当前开箱即用的Google提供的PubSub到PubSub模板流程的基准测试(请参阅:https://cloud.google.com/dataflow/ docs/templates/overview虽然未在此处列出,但您可以从控制台创建它.
我们的测试工具生成并发送了数百个带有时间戳的数百字节JSON格式的消息,并比较了两端的延迟.非常简单:
测试发布者 - > PubSub - >数据流 - > PubSub - >测试订阅者.
对于单实例发布者和订阅者,我们改变了消息速率并尝试了窗口和触发策略,看看我们是否可以改善平均延迟,但通常无法在1,500 - 2000条消息中端到端地改进1.7秒以上每秒(我们的典型工作量).
然后,我们从等式中删除了Dataflow,并直接将发布者连接到订阅者,并且对于相同的消息速率,通常看到延迟通常在20-30毫秒左右.
恢复使用标准PubSub到PubSub数据流模板,我们看到端到端延迟类似于我们的应用程序数据流大约1.5 - 1.7秒.
我们在管道中的各个点对时间戳进行采样,并将值写入数字自定义指标,并且已经看到将消息添加到PubSubIO.Read的初始PCollection的平均延迟大约为380毫秒,但最小值为25毫秒,由于启动开销,我们忽略了更高的值.但似乎有一个我们无法影响的开销.
我们尝试的窗口策略如下所示:
Pipeline p = Pipeline.create(options);
/*
* Attempt to read from PubSub Topic
*/
PCollectionTuple feedInputResults =
p.apply(feedName + ":read", PubsubIO.readStrings().fromTopic(inboundTopic))
.apply(Window.<String>configure()
.triggering(Repeatedly
.forever(AfterWatermark.pastEndOfWindow()
.withEarlyFirings(
AfterProcessingTime
.pastFirstElementInPane()
.plusDelayOf(Duration.millis(windowDelay)))
// Fire on any late data
.withLateFirings(AfterPane.elementCountAtLeast(windowMinElementCount))))
.discardingFiredPanes())
.apply(feedName + ":parse", ParDo.of(new ParseFeedInputFn())
.withOutputTags(validBetRecordTag,
// Specify the output with tag startsWithBTag, as a TupleTagList.
TupleTagList.of(invalidBetRecordTag)));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
852 次 |
| 最近记录: |