Flink DataStream-如何从输入元素启动源?

时间:2018-09-21 17:58:44

标签: java apache-flink flink-streaming

说我有一个名为SourceFunction<String>的Flink RequestsSource

对于从该源发出的每个请求,我想订阅一个外部数据源(出于示例的目的,它可以启动一个单独的线程并开始在该线程上生成数据)。

可以将输出数据合并到单个DataStream上。例如

Input Requests: A, B
Data produced:
 A1
 B1
 A2
 A3
 B2
 ...

...等,新元素将永久添加到DataStream中。

如何编写一个Flink运算符可以做到这一点?我可以使用例如FlatMapFunction

2 个答案:

答案 0 :(得分:2)

您通常希望使用AsyncFunction,该Apache Flink Training - Async IO(可以异步地)使用一个输入元素,调用某些外部服务并发出结果集合。

另请参阅https://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html#pagination

-肯

答案 1 :(得分:1)

听起来您正在询问一个运营商,在接收到订阅事件之后,该运营商可以根据与外部服务的连接来发出一个或多个无限的数据流。我看到的唯一干净的方法是在SourceFunction或自定义Operator中完成所有工作。

我不认为异步I / O可以从单个输入事件中发出无限的结果流。 ProcessFunction可以做到这一点,但只能通过其onTimer方法。