我正在使用一个 Apache Flink 应用程序,该应用程序从 Kafka 读取数据流。应用程序处理流,从数据创建对象,并通过标记对象创建的开始时间和执行一系列转换(包括 keyBy 和一些计算)后的结束时间来计算处理时间。
在大多数情况下,记录的处理时间在 0-1 毫秒之间。然而,我注意到一些结果显示处理时间异常长,超过 10 毫秒。尽管有以下一致的设置,但这种行为似乎是间歇性的并且在运行之间有所不同:
什么可能导致处理时间出现间歇性峰值?如何诊断根本问题?还是说这种波动是正常的?
这种延迟的变化并不令人惊讶。
首先想到的是垃圾收集。如果您还没有这样做,那么使用最新的 Flink 版本与 Java 17 或 21 以及 ZGC 可能会有所帮助。
还有许多其他配置细节也可能发挥作用。如果不了解更多关于您的应用程序和环境的信息,就很难知道从哪里开始。