带有反馈循环的Apache Flink Stream

时间:2018-05-17 02:40:36

标签: apache-flink

如何在Flink流中实现反馈循环。换句话说,我如何编写一个也是SourceFunction的SinkFunction?

DataStream<Control> controlSignal = ..
DataStream<Data> dataStream = ...

DataStream<Output>  outputStream = controlSignal
.connect(dataSignal)
.flapMap(FlatMapFunction)

现在,我想将outputStream发送到接收器并且还基于某些逻辑将数据发送到ControlStream。

这样做的一种方法是让ControlStream从像Kafka这样的外部系统读取,我可以将outputStream输出到Kafka主题,然后就可以完成这项工作。但是,如果我只想从流的末尾反馈到流的开头,那么使用外部系统似乎很奇怪。

1 个答案:

答案 0 :(得分:0)

您需要使用iteration。迭代控制信号的一种常用方法是使用side output来自函数的Control数据(在您的情况下,它必须是CoProcessFunction),然后您可以使用它来关闭迭代。

一个挑战通常是控制流想要广播,而数据流被分区以进行并行处理。 Flink 1.5支持连接键控和广播流,旧版本不支持。