Flink广播侧输出的一个并行处理功能是否在反馈回路中?

rjzwgtxy  于 2022-12-09  发布在  Apache
关注(0)|答案(1)|浏览(113)

我使用的是Apache Flink v1.9.1
我有一个键控(分区)数据流,它需要生成一些数据元组和一些控制信号,这些控制信号需要循环回生成器。除了我希望控制信号流被广播到生成器的所有分区/并行任务。控制信号的数据类型与主数据流不同。
使用广播和迭代来实现这一点是否可能?如果不可能,有没有其他方法来实现这一点?
下面是我要做的工作的大致伪代码:

IterativeStream<Integer> iteration = initialkeyedStream.iterate();  
DataStream<Tuple2<Integer, Long>> mainDataStream = iteration.process(/*some stuff happens here/*);
DataStream<String> sideOutputStream = mainDataStream.getSideOutput(outputTag); //control signal stream
DataStream<String> bcsideOutputStream = sideOutputStream.broadcast(); *//or should this be BroadcastStream<String> bcsideOutputStream?*
iteration.closeWith(bcsideOutputStream);
5gfr0r5j

5gfr0r5j1#

建议不要对流使用迭代,因为它们会阻止使用检查点。如果您关心容错保证,一种替代方法是将环回控制事件发送到接收器,并添加一个从该接收器读取的源。或者您可以考虑使用有状态函数API。
至于你最初的问题,我不知道是否有可能在迭代中使用广播流。广播流是在迭代被有效地放弃之后很久才添加的,所以如果它碰巧工作了,我会认为这或多或少是偶然的,并且不是一个受支持的特性。

相关问题