为什么我在flink中看不到源头的水印而看到后续的算子?

问题描述 投票:0回答:1

我有一个 flink 应用程序,我从两个 kafka 源读取数据并对两个流执行连接操作

我在源头设置水印策略

     DataStreamSource<Event> dataStream =  env.fromSource(
                source, watermarkStrategy, id, typeInformation);

现在,当我在 flink UI 中查看应用程序时,我在源代码中看不到任何水印,但我可以在连接运算符中看到它。该值与我期望从源发出的值相匹配。为什么我在 UI 中看不到它从源发出?

我添加断点并调试,我可以看到源代码处生成了水印

apache-flink flink-streaming
1个回答
0
投票

从概念上讲,水印是由 Flink 运行时而不是源生成的,并在源之后注入到流中。因此,源操作员(您在 UI 中看到的)从技术上讲并不知道水印值。

另请注意,操作员处的水印值(对于每个子任务)是所有“传入”通道的最小值。因此,Flink 运行时需要添加支持来捕获和报告每个子任务的当前outbound水印。

© www.soinside.com 2019 - 2024. All rights reserved.