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