flink - 将值注入 flatmap

flink - inject values into flatmap

情况:多个相同的 kafka 数据源被平面映射到元组中以供以后合并、缩减、保存等等。

我需要知道每个平面映射数据包来自哪个原始数据源以在元组中进行标记。我不想为每个数据源设置单独的 FlatMapFunction,因为可能有数百个。

理想情况下,我能够将一些值传递到 flatmap 函数以添加到生成的元组中。

可能吗?还有其他方法可以实现吗?

由于您有多个源操作符,您可以通过构造函数参数简单地配置不同的源。作为替代方案,您还可以使用 广播变量 https://cwiki.apache.org/confluence/display/FLINK/Variables+Closures+vs.+Broadcast+Variables

关于union:这取决于你需要的语义。如果你在 before reduce 步骤中这样做,分区将建立在所有源之上——如果你在 after reduce 中这样做,你得到每个来源的分区。因此,如果两个源发出具有相同键的元组,它们最终会在不同的分区中。在 flatMap 之前执行并集不允许 flatMap 与源链接——如果禁止链接,我预计会出现性能损失。