Flink中基于无界集合的流

问题描述

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

解决方法

您可以创建一个永不终止的自定义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;
    }
}

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...