Apache Flink flatMap拥有数百万输出

时间:2018-01-07 20:52:37

标签: apache-flink

每当我收到一条消息时,我想从数据库中读取数据,可能会返回数百万行,然后我想在流中传递。这在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推送)

1 个答案:

答案 0 :(得分:1)

原则上这应该是可能的。不过,我建议您使用AsyncFunction代替FlatMapFunction

请注意,此类设置可能需要调整检查点参数,例如检查点间隔。