假设我有一个名为SourceFunction<String>
的Flink RequestsSource
。
对于来自该源的每个请求,我想订阅一个外部数据源(出于示例的目的,它可以启动一个单独的线程并开始在该线程上生成数据)。
输出数据可以在单个DataStream
上连接。例如
输入请求:A,B
产生的数据:
A1
B1
A2
A3
B2
...
...等等,新元素将永久添加到DataStream中。
如何编写可以做到这一点的Flink运算符?我可以使用例如FlatMapFunction
?
最佳答案
听起来您是在问一个运营商,在收到订阅事件之后,该运营商可以根据与外部服务的连接来发出一个或多个无限数据流。我可以看到的唯一干净的方法是在SourceFunction或自定义Operator中完成所有工作。
我不认为异步I / O可以从单个输入事件中发出无限的结果流。 ProcessFunction可以执行此操作,但只能通过其onTimer方法。