0

是否可以在 flink 中创建无界的集合流。就像在地图中一样,如果我们添加一个元素,flink 应该像在套接字流中一样处理。一旦读取了初始元素,它就不应退出。

4

1 回答 1

0

您可以创建一个SourceFunction永远不会终止的自定义(直到cancel()被调用,并在它们出现时发出元素。您希望有一个看起来像这样的类:

class MyUnboundedSource extends RichParallelSourceFunction<MyType> {

    ...
    private transient volatile boolean running;
    ...

    @Override
    public void run(SourceContext<MyType> ctx) throws Exception {
        while (running) {
            // Call some method that returns the next record, if available.
            MyType record = getNextRecordOrNull();
            if (record != null) {
                ctx.collect(record);
            } else {
                Thread.sleep(NO_DATA_SLEEP_TIME());
            }
        }
    }

    @Override
    public void cancel() {
        running = false;
    }
}

请注意,您需要担心为此保存状态以支持至少一次或仅一次生成记录。

于 2020-09-29T18:29:21.880 回答