问题描述
我用我的Apache Flink流应用程序进行了一次实验,尝试在滚动时间窗口中设置不同的大小。我每次都向应用程序提供相同的数据,并在进行一些计算后测量了应用程序发出数据所需的时间。正如预期的那样,一个较大的时间窗口要比一个较小的窗口花费更长的时间来发射输出,但是最多只能达到一点。当窗口变小然后说14ms时,计算的开销成本(我猜是这样)使得发送输出的时间比使用16ms窗口时要长。
您将如何解释这一点,特别是在Apache Flink流应用程序中?这些间接费用的详细信息是什么?该应用程序已与Kinesis Data Analytics集成。
解决方法
网络内存缓冲区的默认值为100ms。在发送记录或缓冲区已满之前,它最多将记录存储100毫秒。
对我来说,在此值下测量任何窗口大小的性能都没有什么意义。我想您提到的开销可能会占主导地位,因为您的系统也正在等待100毫秒的流逝(我假设您没有填充缓冲区which default to 32KiB;如果它们占用2MiB / s,每15毫秒填充一次。)
尝试将execution.buffer-timeout设置为5(毫秒)以优化延迟,或设置为 -1以优化吞吐量,然后重新执行工作负载。
由于这是Kinesis Data Analytics,因此您可能必须这样做programatically:
env.setBufferTimeout(5);
env.generateSequence(1,10).map(new MyMapper()).setBufferTimeout(5);