每当我收到一条消息时,我想从数据库中读取数据,可能会返回数百万行,然后我想在流中传递。这在Flink被认为是好习惯吗?
public static class StatsReader implements FlatMapFunction<Msg, Json> {
Transactor txor =
...;
@Override
public void flatMap(Msg msg, Collector<Json> out) {
//Possibly lazy and async stream
java.util.Stream<Json> results =
txor.exec(Stats.read(msg));
results.foreach(stat->out.collect(stat));
}
}
编辑:
背景:我想动态运行报告。 db基本上是一个巨大的窗口。该报告基于该窗口+实时数据。该报告具有高度可定制性,因此难以预处理结果或先验地定义管道。
我今天使用vanilla java,管道大致如下: ReportDefinition - &gt; (elasticsearch查询+实时流) - &gt; (ReportProcessingPipeline) - &gt; (Websocket推送)
答案 0 :(得分:1)
原则上这应该是可能的。不过,我建议您使用AsyncFunction
代替FlatMapFunction
。
请注意,此类设置可能需要调整检查点参数,例如检查点间隔。