是否可以在 flink 中创建无界的集合流。就像在地图中一样,如果我们添加一个元素,flink 应该像在套接字流中一样处理。一旦读取了初始元素,它就不应退出。
问问题
77 次
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 回答