如何解释在ApacheFlink流应用程序中,与较大的时间窗口相比,非常小的时间窗口需要更长的时间来发出输出



我用我的Apache Flink流媒体应用程序做了一个实验,尝试不同大小的翻滚时间窗口。我每次都向应用程序提供相同的数据,并在进行一些计算后测量应用程序发出数据所需的时间。正如预期的那样,一个大的时间窗口比一个小的窗口需要更长的时间来发出输出,但只是在一定程度上。当窗口变得更小时,比如说14ms,计算的开销成本(我想(使得发出输出的时间比使用16ms窗口时更长。

你会如何解释这一点,特别是在Apache Flink流媒体应用程序中?这些间接费用的具体情况是什么?该应用程序与Kinesis Data Analytics集成。

网络内存缓冲区的默认值为100ms。它在发送记录之前,或者在缓冲区已满的情况下,最多存储100毫秒。

对我来说,在这个值下测量任何窗口大小的性能都没有什么意义。我想你提到的开销可能会占主导地位,因为你的系统也在等待100毫秒的流逝(我假设你没有填充缓冲区,默认为32KiB;如果每15毫秒填充一次,则为2MiB/s(。

尝试将execution.buffer-timeout设置为5(ms(以优化延迟,或设置为-1以优化吞吐量,然后重新执行工作负载。

由于这是Kinesis数据分析,你可能必须用程序来做:

env.setBufferTimeout(5);
env.generateSequence(1,10).map(new MyMapper()).setBufferTimeout(5);