我有一个 flink 应用程序,我从两个 kafka 源读取数据并对两个流执行连接操作
我在源头设置水印策略
DataStreamSource<Event> dataStream = env.fromSource(
source, watermarkStrategy, id, typeInformation);
现在,当我在 flink UI 中查看应用程序时,我在源代码中看不到任何水印,但我可以在连接运算符中看到它。该值与我期望从源发出的值相匹配。为什么我在 UI 中看不到它从源发出?
我添加断点并调试,我可以看到源代码处生成了水印
从概念上讲,水印是由 Flink 运行时而不是源生成的,并在源之后注入到流中。因此,源操作员(您在 UI 中看到的)从技术上讲并不知道水印值。
另请注意,操作员处的水印值(对于每个子任务)是所有“传入”通道的最小值。因此,Flink 运行时需要添加支持来捕获和报告每个子任务的当前outbound水印。