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

Apache flink 如何解释在ApacheFlink流媒体应用程序中,与较大的时间窗口相比,非常小的时间窗口需要更长的时间来发出输出?,apache-flink,amazon-kinesis,Apache Flink,Amazon Kinesis,我用我的ApacheFlink流媒体应用程序做了一个实验,在翻滚的时间窗口中尝试不同的大小。我每次都向应用程序输入相同的数据,并在进行一些计算后测量应用程序发出数据所用的时间。正如预期的那样,与较小的窗口相比,较大的时间窗口需要更长的时间来发出输出,但仅在某一点上。当窗口变小时,比如说14毫秒,计算的开销(我猜)使得它比使用16毫秒窗口的时间长 您如何解释这一点,特别是在ApacheFlink流媒体应用程序中?这些间接费用的具体内容是什么?该应用程序与Kinesis数据分析集成。网络内存缓冲区的

我用我的ApacheFlink流媒体应用程序做了一个实验,在翻滚的时间窗口中尝试不同的大小。我每次都向应用程序输入相同的数据,并在进行一些计算后测量应用程序发出数据所用的时间。正如预期的那样,与较小的窗口相比,较大的时间窗口需要更长的时间来发出输出,但仅在某一点上。当窗口变小时,比如说14毫秒,计算的开销(我猜)使得它比使用16毫秒窗口的时间长


您如何解释这一点,特别是在ApacheFlink流媒体应用程序中?这些间接费用的具体内容是什么?该应用程序与Kinesis数据分析集成。

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

对我来说,在这个值下测量任何窗口大小的性能都没有什么意义。我想您提到的开销可能会占主导地位,因为您的系统也在等待100毫秒的过去(我假设您没有填充缓冲区,如果每15毫秒填充一次缓冲区,则会是2兆比特/秒)

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

由于这是Kinesis数据分析,您可能需要:


谢谢你的回答。我只是想知道,当使用非常小的窗口时,会发生哪些特定的开销,使程序发射速度变慢。也许你回答了,但我不明白答案你能详细说明什么是被测量的,以及如何测量吗?正如@benoitparis所提到的,考虑到网络缓冲区超时(以及自动水印间隔,如果使用事件时间)的影响,不清楚如何在这些小窗口中获得有意义的可比结果。您对后端状态的选择,以及您的窗口结果是否正在增量聚合,也可能会产生重大影响。是每个窗口中的事件数保持不变,还是吞吐量保持不变,还是?
env.setBufferTimeout(5);

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