如何在Flink流中实现反馈循环。换句话说,我如何编写一个也是SourceFunction的SinkFunction?
DataStream<Control> controlSignal = ..
DataStream<Data> dataStream = ...
DataStream<Output> outputStream = controlSignal
.connect(dataSignal)
.flapMap(FlatMapFunction)
现在,我想将outputStream发送到接收器并且还基于某些逻辑将数据发送到ControlStream。
这样做的一种方法是让ControlStream从像Kafka这样的外部系统读取,我可以将outputStream输出到Kafka主题,然后就可以完成这项工作。但是,如果我只想从流的末尾反馈到流的开头,那么使用外部系统似乎很奇怪。
答案 0 :(得分:0)
您需要使用iteration。迭代控制信号的一种常用方法是使用side output来自函数的Control
数据(在您的情况下,它必须是CoProcessFunction
),然后您可以使用它来关闭迭代。
一个挑战通常是控制流想要广播,而数据流被分区以进行并行处理。 Flink 1.5支持连接键控和广播流,旧版本不支持。